Apache-2.2

NGINX 與“serverpool”作為同一 Apache 伺服器上不同域的 LB?

  • March 2, 2015

我有 nginx 作為 LB。以及 2 個 Apache 作為 Web 伺服器。可以說我有不同的域:

兩個域將位於相同的 2 個 Apache 伺服器中。但是ofcoz在不同的目錄下。並與VHostApache 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 在反向代理時傳遞上游的主機名

你的 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;
 }
}

引用自:https://serverfault.com/questions/672413