502在使用Docker和Nginx的反向代理时存在错误网关



我已经为我的问题搜索了StackOverflow,但我似乎总是用我的Nginx Docker配置击中502 Bad Gateway。我试图使用我的域mydomain.com/pgadmin而不是mydomain.com:8060访问pgadmin4,其中8060是它的docker容器暴露的端口。我的docker-compose.yml文件看起来像这样:

version: '3.5'
services:
reverse-proxy:
image: nginx:1.19.6
restart: always
ports:
- "80:80"
- "443:443"

postgres:
image: postgres:12
ports:
- "5432:5432"

pgadmin:
image: dpage/pgadmin4
depends_on:
- postgres
ports:
- "8060:80"

networks:
default:
external:
name: defaultnetwork

我的nginx容器的default.conf文件看起来像这样:

upstream pgadmin {
server 127.0.0.1:8060;
}
server {
listen       80;
listen  [::]:80;
server_name  mydomain.com;

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

location /pgadmin {
proxy_pass http://pgadmin;
} 
}

有了这个配置,我一直得到502 Bad Gateway错误。有人能好心地指出我哪里错了吗?我真的很感激。

谢谢。

[编辑]这是来自docker日志:

2021/02/03 08:07:42 [error] 23#23: *2 connect() failed (111: Connection refused) while connecting to upstream, client: ***.***.***.***, server: mydomain.com, request: "GET /pgadmin HTTP/1.1", upstream: "http://127.0.0.1:8082/pgadmin", host: "mydomain.com"

502问题来自于这里的环回IP:

上游pgadmin {服务器127.0.0.1:8060;}

127.0.0.1localhost的NGINX容器是NGINX容器本身。您应该使用服务的名称:

upstream pgadmin {
server pgadmin:8060;
}

服务名称来自docker-compose.yml:

services:
pgadmin: # <- this
image: dpage/pgadmin4

如果您在这些更改后遇到404,这是因为您必须更改应用程序的基本路径。尝试使用以下配置:

location /pgadmin/ {
proxy_set_header X-Script-Name /pgadmin;
proxy_set_header Host $host;
proxy_pass http://pgadmin;
proxy_redirect off;
}

由于您的容器在同一网络中工作,您应该通过Nginx容器的第80个端口访问Pgadmin容器。

你应该将Nginx配置中的server 127.0.0.1:8060行替换为server pgadmin:80行。

最新更新