web-dev-qa-db-ja.com

同じサーバー上のnginxとApache2

私はnginxとApache2でubuntu 16.04を持っています。このマシンを指す2つのDNS Aレコードがあります。

  • app1.mydomain.com
  • app2.mydomain.com

Apacheでapp1.mydomain.comを解決し、nginxでapp2.mydomain.comを解決する必要があります。両方ともポート80にあります。可能ですか?

さらに、Apacheは2つの異なるアプリケーション(site1とsite2)を処理する必要があります。

をお願いします:

  • app1.mydomain.com/site1-Apacheによって解決され、アプリケーションsite1を実行する
  • app1.mydomain.com/site2-Apacheによって解決され、アプリケーションsite2を起動する
  • app2.mydomain.com-nginxでゴーストアプリケーションを提供する

これは私のApache設定です:

<VirtualHost *:80>
    ServerAdmin [email protected]

    ServerName app1.mydomain.com

    ServerAlias www.app1.mydomain.com

    ErrorLog /var/www/site1/logs/error.log

    CustomLog /var/www/site1/logs/access.log combined

    WSGIScriptAlias /api /var/www/site1/application/index.py/

    Alias /static /var/www/site1/application/static

    <Directory /var/www/site1/application>
            Order deny,allow
            Allow from all
    </Directory>

    AddType text/html .py

    ErrorLog /var/www/site2/logs/error.log
    CustomLog /var/www/site2/logs/access.log combined

    WSGIScriptAlias /site2 /var/www/site2/index.py/
    Alias /site2/uploads /var/sftp/site2/uploads/

    <Directory /var/www/site2/>
            Order deny,allow
            Allow from all
    </Directory>

これは私のNGINX設定ファイルです:

server {
listen 8080;
listen [::]:8080;

server_name app2.mydomain.com;
root /var/www/ghost/system/nginx-root;

location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_Host;
    proxy_pass http://127.0.0.1:2368;

}
location ~ /.well-known {
    allow all;
}

client_max_body_size 50m;
}

まず第一に。 ApacheとNginxはWebサーバーです-notdnsサーバー。彼らは何も解決しません。この質問はDNSとは関係ありませんが、Webサーバーがリクエストを処理する方法に関するすべてです。

Apacheでapp1.mydomain.comを解決し、nginxでapp2.mydomain.comを解決する必要があります。両方ともポート80。それは可能ですか?

いいえ、これは不可能です。 2つのアプリケーションが同じポートをリッスンすることはできません。これは2つの方法で解決できます。

  1. Apacheがポート80でリッスンし、app2.mydomain.comのリクエストをnginxにプロキシし、別のポートでリッスンし、app1.mydomain.comに直接サービスを提供します。
  2. 反対。 Apache用のnginxプロキシを使用します。

または-両方を同じWebサーバーでホストします。 Apacheとnginxは多くの場合、技術レベルで交換可能であるため、アプリケーションの観点からは実際には問題になりません。管理面では、それらはかなり異なります。

ポート8080でnginxを実行しているので、Apacheをプロキシとして使用することを想定しています。次に、Apache用の新しい仮想ホストを作成します。 /etc/Apache2-sites-available/app2.mydomain.com.conf

<VirtualHost *:80>
   DocumentRoot "/var/www"
   ErrorLog "logs/app2-error_log"
   CustomLog "logs/app2-access_log" common
   ServerName app2.mydomain.com
   ProxyRequests Off
   <Proxy *>
          Order deny,allow
          Allow from all
    </Proxy>
     Proxypass / http://localhost:8080/
</VirtualHost>

次にSudo a2enmod proxy_http; Sudo a2ensite app2.mydomain.com; Sudo service Apache2 reloadを実行します。

これによりmod_proxy、mod_proxy_httpが有効になり、ApacheがVirtualHost app2.mydomain.comへのリクエストをnginxに転送します。nginxはポート8080で実行されます。

この設定はテストしていませんので、調整が必要になる場合があります。

補足として:なぜnginxが必要なのですか? nginxのセットアップによれば、ポート2368で実行されている他のWebサーバーへのリクエストをプロキシするだけです。Apacheを使用して直接プロキシできます...

mod_proxy -ドキュメントは微調整に便利かもしれません。

1
vidarlo

質問の内容により、ポート#ごとに1つのアプリケーションにしかアクセスできないことを除いて、すでに解決済みです。同じポートでApache2とNginxの両方を実行することはできません。不可能です。

すでに述べたように、すでにDNSが機能しており、正しいマシン(IP)を指している。 app1.mydomain.comにはデフォルトで(port 80)到達できます:

http://app1.mydomain.com

それは同じです

http://app1.mydomain.com:80

Nginxのポートを指定する必要があります。これは、構成ファイルによってport 8080に設定されています。

これを使用して、サイト1にアクセスします。

http://app1.mydomain.com:8080

間違ったポートを指定すると、使用されるドメイン名に関係なくデフォルトページがロードされます。 Apacheの場合、別の指定がない限り、デフォルトは最初の仮想ホストです。

0
L. D. James