ubuntu 14.04升级到16.04后,nginx错误502: bad gateway,直到nginx重启

ubuntu 14.04升级到16.04后,nginx错误502: bad gateway,直到nginx重启

我研究过这个问题,但大多数情况下 502 错误的原因是 nginx.conf 或上游服务配置不当。我相信这是不一样的。

正如标题所示,我将 ubuntu 服务器 14.04 升级到了 16.04。我使用 nginx 作为我的 Web 服务器,并且还运行 java/tomcat 服务器,在我的 nginx 配置中将其设置为 proxy_pass。

自升级以来,每次服务器启动时,nginx 都会502: Bad Gateway在尝试连接到 proxy_pass 站点时显示错误。我的配置中指定的所有其他站点均按预期运行。

服务启动的顺序是否可能导致持续的 502 错误?

为了解决这个问题,我必须sudo systemctl restart nginx,之后,proxy_pass 服务将按预期工作,直到下次重启。

从错误日志中:

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。如何解决这个问题?

答案1

upstream: "http://[::1]:4040/…

您的上游可能仅监听 IPv4 本地主机 ( 127.0.0.1:4040),而 nginx 正尝试连接到 IPv6 本地主机 ( [::1]:4040)。

lynx 之所以有效是因为它尝试了两者。

猜测:nginx可能因为它一开始就尝试了两种方式,但都失败了,所以从那时起它就坚持使用 IPv6。

修复:更改上游以127.0.0.1明确使用或更改上游以侦听 IPv4 和 IPv6。

相关内容