我试图让一个带有nginx的docker容器作为其他docker容器的反向代理工作,并且我一直在使用" Bad Gateway"在基本位置以外的其他位置' /'。
我有以下服务器块:
server {
listen 80;
location / {
proxy_pass "http://game2048:8080";
}
location /game {
proxy_pass "http://game:9999";
}
}
适用于http://localhost
,但不适用于http://localhost/game
,它可以提供" Bad Gateway"在浏览器中,这在nginx容器上:
[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"
我使用官方的nginx docker镜像并在其上放置我自己的配置。您可以在此处测试并查看所有详细信息: https://github.com/jollege/ngprox1
任何想法出了什么问题?
注意:我在docker主机上设置了本地主机名条目以匹配这些名称:
127.0.1.1 game2048
127.0.1.1 game
答案 0 :(得分:8)
我修好了!我在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";
}
}
github repo已更新以反映修复,旧的自述文件位于./README.old01.md
下。
当我仔细地将问题写给别人时,我找到了答案。你知道那种感觉吗?
答案 1 :(得分:1)
我也遇到同样的“ 502 Bad Gateway”错误,但是解决方案是按照this post指令调整proxy_buffer_size:
proxy_buffering off;
proxy_buffer_size 16k;
proxy_busy_buffers_size 24k;
proxy_buffers 64 4k;
答案 2 :(得分:0)
对我来说,这行代码proxy_set_header Host $http_host;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_pass http://myserver;
}
答案 3 :(得分:0)
我有同样的错误,但是对于一个Web应用程序,它只是无法在配置中提到的IP和端口上使用。
所以说你有这个:
location /game {
proxy_pass "http://game:9999";
}
然后确保您期望在http://game:9999处使用的Web应用程序确实是在名为“ game”的Docker容器中提供的,并且代码已设置为在9999端口提供该应用程序。
答案 4 :(得分:0)
就我而言,4 小时后,只有我错过了使用 semanage 命令放置端口。
location / {
proxy_pass http://A.B.C.D:8090/test;
}
解决方案是添加 8090 端口并有效。
semanage port -a -t http_port_t -p tcp 8090