从ubuntu 14.04升级到16.04之后,nginx错误502:坏网关,直到重新启动nginx

我已经研究过这个问题,但在大多数情况下,502错误的原因是配置不正确的nginx.conf或上游服务.我相信这是不同的..

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

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

是否可能启动服务的顺序可能导致持续的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.我该如何解决这个问题?

最佳答案
上游:“http:// [:: 1]:4040 / …

您的上游可能只侦听IPv4 localhost(127.0.0.1:4040),而nginx正在尝试连接到IPv6 localhost([:: 1]:4040).

lynx的作用是因为它同时尝试了.

GUESS:nginx可能会失败,因为它在开始时尝试两者,都失败,然后从那里开始坚持使用IPv6.

FIX:更改上游以显式使用127.0.0.1或更改上游以侦听IPv4和IPv6.

转载注明原文:从ubuntu 14.04升级到16.04之后,nginx错误502:坏网关,直到重新启动nginx - 代码日志