同じ Apache サーバー上の異なるドメインの LB として「serverpool」を使用する NGINX ですか?

同じ Apache サーバー上の異なるドメインの LB として「serverpool」を使用する NGINX ですか?

LB として nginx を使用しています。また、Web サーバーとして 2 つの Apache を使用しています。異なるドメインがあるとします。

  • 参考文献
  • チェックアウト

両方のドメインは同じ 2 つの Apache サーバーにあります。ただし、もちろん、異なるディレクトリの下にあります。また、VHostApache vhost ファイルには異なるファイルがあります。

以下のようなデザインです。

          Nginx
            |
      -------------
      |           |
   Apache       Apache

以下は、2 番目のドメイン (checkout.example.com) では機能しない、現在の既存の Nginx .conf ファイルです。

NGINX (mysites.conf) から:

upstream serverpool {
  server 1.2.3.101:80 weight=1;
  server 1.2.3.102:80 weight=1;
}

server {
  listen 80;
  server_name www.example.com checkout.example.com;
  location / {
    proxy_pass http://serverpool;
  }
}

2つのApacheサーバーの両方から同じVhost ファイル (httpd.conf):

<VirtualHost *:80>
   ServerName www.example.com
   DocumentRoot /var/www/html/www.example.com/
</VirtualHost>
<VirtualHost *:80>
   ServerName checkout.example.com
   DocumentRoot /var/www/html/checkout.example.com/
</VirtualHost>

しかし、私がそれを閲覧するたびに(http://checkout.example.com)、ドメインはまだ表示されるブラウザで..ただし、(www.example.com) の内容は、それは完全に間違っています。

何を間違えたのでしょうか?

答え1

ほとんどの場合、ヘッダーを設定する必要があります。そうしないと、Hostnginx はデフォルトに戻りますが、これは Apache では役に立ちません。proxy_set_header Host $proxy_host;serverpool

見るhttp://nginx.org/r/proxy_set_headerそしてhttp://nginx.org/r/proxy_pass詳細については。

upstream serverpool {
  server 1.2.3.101:80 weight=1;
  server 1.2.3.102:80 weight=1;
}

server {
  listen 80;
  server_name www.example.com checkout.example.com;
  location / {
    proxy_pass http://serverpool;
    proxy_set_header Host $host;
  }
}

答え2

HOST:ヘッダーをアップストリームサーバーのIPにも送信する必要があります。

この記事は質問に完全に答えている

リバースプロキシ時にアップストリームのホスト名を渡すように nginx を設定する

また、nginxの設定は次のようになります

    upstream serverpool {
  server 1.2.3.101:80 weight=1;
  server 1.2.3.102:80 weight=1;
}

server {
  listen 80;
  server_name www.example.com checkout.example.com;
  location / {
    proxy_pass http://serverpool;
    proxy_set_header Host $host;
  }
}

関連情報