Nginx
nginx上游不工作
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; } }