docker nginx 出现“502”.1 上游服务器在连接上游时暂时禁用

Posted

技术标签:

【中文标题】docker nginx 出现“502”.1 上游服务器在连接上游时暂时禁用【英文标题】:docker nginx appear "502".1 upstream server temporarily disabled while connecting to upstream 【发布时间】:2017-12-13 04:13:08 【问题描述】:

我在 docker 中使用 nginx,这是我的 nginx 配置

server     listen  80;     server_name saber;

    location /         
       root /usr/share/nginx;       
       index index.html;


    location /saber        
        proxy_pass http://localhost:8080;   
        proxy_redirect off;     
        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_buffer_size 4k;       
        proxy_buffers 4 32k;        
        proxy_busy_buffers_size 64k;    
        proxy_connect_timeout 90;   
    


当我在浏览器中使用“http://localhost/saber/blog/getBlog.do”时,浏览器给我一个错误“502”。 和 nginx 的 error.log 有新的。

2017/07/09 05:16:18 [warn] 5#5: *1 upstream server temporarily disabled while connecting to upstream, client: 172.17.0.1, server: saber, request: "GET /saber/blog/getBlog.do HTTP/1.1", upstream: "http://127.0.0.1:8080/saber/blog/getBlog.do", host: "localhost"

我可以保证“http://127.0.0.1:8080/saber/blog/getBlog.do”在浏览器中响应成功。 我尝试在其他问题中搜索答案,我发现答案是“/usr/sbin/setsebool httpd_can_network_connect true”,这是问题网址“nginx proxy server localhost permission denied”,但我在win10中使用docker,nginx容器dont hava setsebool,because the container dont找到 SELinux。 这一切,提前谢谢你。

【问题讨论】:

【参考方案1】:

每个容器(如 nginx 容器)内部的 localhost 与容器外部的 localhost 不同。默认情况下,每个容器都有自己的网络命名空间。您需要将容器放置在同一个 docker 网络(不是默认的桥接网络)上,而不是指向 localhost,并使用容器或服务名称与 Docker 的内置 DNS 进行连接。目标端口也将是容器端口,而不是您主机上的已发布端口。

【讨论】:

哦,我意识到问题的原因是网络。最后,我将“proxy_pass localhost:8080”中的 localhost 更改为“10.2.8.158”(这是我计算机中的 IPv4)。就是这样。谢谢。 这会将你连接到 docker 之外,然后再返回。如果你在 docker 网络中运行东西,它们可以直接连接,容器到容器,这样更便携。 我找到了解决方案here。可能对你有用:-)

以上是关于docker nginx 出现“502”.1 上游服务器在连接上游时暂时禁用的主要内容,如果未能解决你的问题,请参考以下文章

nginx uwsgi websockets 502 Bad Gateway上游过早关闭连接,同时从上游读取响应标头

nginx,uwsgi,DJango,502 当 DEBUG=False,“上游过早关闭连接”

502 Bad Gateway 怎么解决?

在 Docker 后面运行的 Nginx 上出现随机 502/503 错误(在 ECS 集群 + ALB 上)

一次nginx 502问题排查和解决

502 bad gateway是啥意思?怎么解决?