Ubuntu
從 ubuntu 14.04 升級到 16.04 後,nginx 錯誤 502: bad gateway until nginx is restarted
我研究過這個問題,但在大多數情況下,502 錯誤的原因是配置不正確的 nginx.conf 或上游服務。我相信這是不同的..
顧名思義,我將 ubuntu server 14.04 升級到了 16.04。我使用 nginx 作為我的 Web 伺服器,並且還在執行 java/tomcat 伺服器,在我的 nginx 配置中設置為 proxy_pass。
自升級以來,每次伺服器啟動時,nginx
502: Bad Gateway
在嘗試連接 proxy_pass 站點時都會顯示錯誤。我的配置中指定的所有其他站點都按預期工作。服務啟動的順序是否可能導致持續的 502 錯誤?
要解決此問題,我必須
sudo systemctl restart nginx
在此之後,proxy_pass 服務按預期工作,直到下一次重新啟動。從error.log:
2018/01/24 11:33:20 [error] 1886#1886: *202 connect() failed (111: Connection refused) while connecting to upstream, client: 10.0.0.1, server: localhost, request: "GET /radio/rest2/savePlayQueue.view?u=user&p=enc:xxxxxxxx&v=2.0.0&c=DSub&id=0000¤t=0000&position=0 HTTP/1.1", upstream: "http://[::1]:4040/radio/rest2/savePlayQueue.view?u=user&p=enc:xxxxxxxx&v=2.0.0&c=DSub&id=0000¤t=0000&position=0", host: "www.myhostname.tld"
在 nginx 生成此錯誤時,我能夠使用該伺服器上的 lynx 連接到 localhost:4040/radio,並獲得了適當的內容。即使在那之後,通過 nginx 連接時仍然存在 502 錯誤。
沒有為此定義的上游塊,但是位置塊是:
location ^~ /radio/ { proxy_pass http://localhost:4040; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Connection ""; # health_check; # nginx: [emerg] unknown directive "health_check" }
我不想每次啟動時都必須重新啟動 nginx。我該如何解決這個問題?
upstream: "http://[::1]:4040/…
您的上游可能只在 IPv4 localhost (
127.0.0.1:4040
) 上偵聽,而 nginx 正在嘗試連接到 IPv6 localhost ([::1]:4040
)。lynx 工作,因為它嘗試兩者。
GUESS:nginx可能會失敗,因為它一開始都嘗試了,都失敗了,然後從那裡開始使用 IPv6。
修復:更改上游以
127.0.0.1
明確使用或更改上游以偵聽 IPv4 和 IPv6。