Apache-2.2
NGINX 與“serverpool”作為同一 Apache 伺服器上不同域的 LB?
我有 nginx 作為 LB。以及 2 個 Apache 作為 Web 伺服器。可以說我有不同的域:
- www.example.com
- checkout.example.com
兩個域將位於相同的 2 個 Apache 伺服器中。但是ofcoz在不同的目錄下。並與
VHost
Apache vhost 文件上的不同文件。就像下面的設計:
Nginx | ------------- | | Apache Apache
以下是我目前現有的 Nginx .conf 文件,該文件不適用於第二個域(checkout.example.com)。
來自 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; } }
來自兩個 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) 的內容,這是完全錯誤的。
請問我做錯了什麼?
你應該幾乎總是設置
Host
標題。否則,nginx 會退回到預設值proxy_set_header Host $proxy_host;
,在您的情況下,serverpool
這對 apache 來說是無用的。有關詳細資訊,請參閱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; } }
您還需要將 HOST: 標頭髮送到您的上游伺服器 IP
這篇文章完全是在質疑
你的 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; } }