私はnginxとApache2でubuntu 16.04を持っています。このマシンを指す2つのDNS Aレコードがあります。
Apacheでapp1.mydomain.comを解決し、nginxでapp2.mydomain.comを解決する必要があります。両方ともポート80にあります。可能ですか?
さらに、Apacheは2つの異なるアプリケーション(site1とsite2)を処理する必要があります。
をお願いします:
これは私の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つの方法で解決できます。
または-両方を同じ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つのアプリケーションにしかアクセスできないことを除いて、すでに解決済みです。同じポートで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の場合、別の指定がない限り、デフォルトは最初の仮想ホストです。