Docker nginx反向代理提供"502 Bad Gateway"

jol*_*ege 9 proxy nginx docker

我正在尝试使用nginx工作的docker容器作为其他docker容器的反向代理,并且我继续在除了基本位置'/'之外的其他位置上获得"Bad Gateway".

我有以下服务器块:

server {

  listen 80;

  location / {
    proxy_pass "http://game2048:8080";
  }

  location /game {
    proxy_pass "http://game:9999";
  }

}
Run Code Online (Sandbox Code Playgroud)

它适用http://localhost但不适用于http://localhost/game浏览器中的"Bad Gateway"和nginx容器上的"Bad Gateway":

[error] 7#7: *6 connect() failed (111: Connection refused) 
while connecting to upstream, client: 172.17.0.1, server: , 
request: "GET /game HTTP/1.1", upstream: "http://172.17.0.4:9999/game", 
host: "localhost"
Run Code Online (Sandbox Code Playgroud)

我使用官方的nginx docker镜像并在其上放置我自己的配置.您可以在此处测试并查看所有详细信息:https: //github.com/jollege/ngprox1

任何想法出了什么问题?

注意:我在docker主机上设置了本地主机名条目以匹配这些名称:

127.0.1.1       game2048
127.0.1.1       game
Run Code Online (Sandbox Code Playgroud)

jol*_*ege 13

我修好了它!我在nginx配置中的不同服务器块中设置服务器名称.请记住使用docker端口,而不是主机端口.

server {

  listen 80;
  server_name game2048;

  location / {
    proxy_pass "http://game2048:8080";
  }

}

server {

  listen 80;
  server_name game;

  location / {
    # Remember to refer to docker port, not host port
    # which is 9999 in this case:
    proxy_pass "http://game:8080";
  }

}
Run Code Online (Sandbox Code Playgroud)

github repo已经更新以反映修复,旧的自述文件在那里./README.old01.md.

当我仔细地将问题写给别人时,我找到了答案.你知道那种感觉吗?

  • Stackoverflow非常适合[橡皮鸭调试](https://en.wikipedia.org/wiki/Rubber_duck_debugging):) (4认同)
  • “记住使用 docker 端口,而不是主机端口。” 救了我。谢谢。 (3认同)
  • 确实!我之前没有听过这个词 - 但是伙计,我知道这个概念! (2认同)

Was*_*des 11

我有同样的“502 Bad Gateway”错误,但解决方案是按照此帖子说明调整 proxy_buffer_size :

proxy_buffering off;
proxy_buffer_size 16k;
proxy_busy_buffers_size 24k;
proxy_buffers 64 4k;
Run Code Online (Sandbox Code Playgroud)


Tow*_*hin 9

查看nginx错误日志

sudo tail -n 100 /var/log/nginx/error.log
Run Code Online (Sandbox Code Playgroud)

如果您在日志中看到权限被拒绝错误,如下所示 -

2022/03/28 03:51:09 [crit] 1140954#0: *141 connect() 到 xxx.xxx.68.xx:8080 在连接到上游时失败(13:权限被拒绝),客户端:xxx.xx。 xxx.25,服务器:www.example.com

httpd_can_network_connect通过运行命令查看 的值是否启用:sudo getsebool -a | grep httpd

httpd_can_network_connect如果您看到is的值,off那么这就是您的问题的原因。

解决方案:通过运行命令httpd_can_network_connect设置值onsudo setsebool httpd_can_network_connect on -P

希望它能解决您的问题。