
同じサーバー上で Apache (ポート 81) と NGINX (ポート 80) を実行しています。www.example.com の場合、NGINX 構成ファイルに以下があります。
問題は、このサーバーで Apache が起動されると、www.example.com に対するすべてのリクエストがポート 81 の Apache サーバーに送信されることです。これはアップストリームでは構成されておらず、www.example.com もローカル Apache インスタンスでは構成されていないため、エラーが発生します。
これをローカルにするのではなく、アップストリームで定義されているように外部にのみ公開したいです。
Apacheを停止するとアップストリームが使用され、nginxからのリクエストはアップストリームで定義されたサーバーに送られます。Apacheを再度起動すると、すべてのリクエストはApacheにローカルにルーティングされます。
では、Apache がロードされたときにリクエストが Apache に送信されるのを回避し、nginx が常に定義されたアップストリームを使用するようにするにはどうすればよいでしょうか?
upstream mainserver {
server w1.externalserver.nl;
server w2.externalserver.nl;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://mainserver;
}
}
答え1
nginx 設定でポート番号を定義することをお勧めします。
upstream mainserver {
server w1.externalserver.nl:81;
server w2.externalserver.nl:81;
}
Apache が正しいポートで listen していることを確認します。Ubuntu インストールの場合:apache2.confまたはポート.conf(このファイルも確認してください。設定を書き換える内容が含まれている可能性があります)。
Listen 127.0.0.1:81
アップデート1
+-------------+
| server 1 | <------- http request :80
| |
| nginx ----+ | -------> redirect to server 2 (You want)
| | |
| Apache <--+ | internal redirect to local Apache (problem place)
+-------------+
1) サーバー 1 で Apache と nginx の両方を実行します。
curl -I http://example.com:80
応答の「サーバー」フィールドを確認します。Apache が存在する場合は、そのすべての構成を注意深く確認します: apache2.conf、ports.conf、仮想ホスト構成 - どこかにポート 80 と Apache の「rewrite」、nginx の「listen」が記載されています。
2).プロトコルなしでproxy_pass http://mainserver;
試す。proxy_pass mainserver;