Ubuntu

從 ubuntu 14.04 升級到 16.04 後,nginx 錯誤 502: bad gateway until nginx is restarted

  • January 24, 2018

我研究過這個問題,但在大多數情況下,502 錯誤的原因是配置不正確的 nginx.conf 或上游服務。我相信這是不同的..

顧名思義,我將 ubuntu server 14.04 升級到了 16.04。我使用 nginx 作為我的 Web 伺服器,並且還在執行 java/tomcat 伺服器,在我的 nginx 配置中設置為 proxy_pass。

自升級以來,每次伺服器啟動時,nginx502: 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&current=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&current=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。

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