Nginx

nginx上游不工作

  • March 8, 2016

upstream當代理伺服器在同一個埠上有****多個主機名綁定時不起作用。

我在嘗試將nginx (1.9.12-1~trusty)proxy_pass配置到Windows Server 2012主機時遇到了這個問題。

我在自己的Windows 10機器上重現了相同的行為。

在下面的配置中,所有主機名都指向同一個機器 IP。

請求有時有效

注意:我希望這是localhost:7778選擇代理的時間。

http {
   upstream w {
       server test1:80;
       server test2:80;
       server localhost:7778;
   }

   server {
       listen       8001;
       server_name  localhost;

       location / {
           proxy_pass http://w;
       }
   }
}

請求在任何時候都不起作用

注意:按照 Alexey 的指出進行了編輯。

http {
   upstream w {
       server test1:80;
       server test2:80;
       # server localhost:7778;
   }

   server {
       listen       8001;
       server_name  localhost;

       location / {
           proxy_pass http://w;
       }
   }
}

請求一直有效

http {

   server {
       listen       8001;
       server_name  localhost;

       location / {
           proxy_pass http://test1:80;
       }
   }
}

或者

http {

   server {
       listen       8001;
       server_name  localhost;

       location / {
           proxy_pass http://test2:80;
       }
   }
}

或者

http {

   server {
       listen       8001;
       server_name  localhost;

       location / {
           proxy_pass http://localhost:7778;
       }
   }
}

有沒有解決的辦法?

當您proxy_pass不使用proxy_set_header指令時,nginx 將使用一些預設標頭。大多數時候它是您想要的,或者至少是無害的,但在您的情況下,您必須手動設置它們。

當你寫的時候proxy_pass http://w,nginx會設置proxy_set_header Host w。如果您需要另一個Host標頭,則應明確設置它。最常見的是使用proxy_set_header Host $host(或proxy_set_header Host $http_host)。

所以這應該適合你:

upstream w {
   server test1:80;
   server test2:80;
   server localhost:7778;
}

server {
   listen       8001;
   server_name  localhost;

   location / {
       proxy_pass http://w;
       proxy_set_header Host $host;
   }
}

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