LB として nginx を使用しています。また、Web サーバーとして 2 つの Apache を使用しています。異なるドメインがあるとします。
- 参考文献
- チェックアウト
両方のドメインは同じ 2 つの Apache サーバーにあります。ただし、もちろん、異なるディレクトリの下にあります。また、VHost
Apache 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
ほとんどの場合、ヘッダーを設定する必要があります。そうしないと、Host
nginx はデフォルトに戻りますが、これは 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;
}
}