nginxは常にローカルApacheにリクエストを送信します

nginxは常にローカルApacheにリクエストを送信します

同じサーバー上で 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;

関連情報