使用 Docker 和 Nginx 进行反向代理时出现 502 Bad Gateway

rea*_*leo 1 nginx docker docker-compose nginx-reverse-proxy

我已经在 StackOverflow 中搜索了我的问题,但我似乎总是遇到502 Bad GatewayNginx Docker 配置问题。我正在尝试pgadmin4使用我的域进行访问mydomain.com/pgadmin,而不是它的 docker 容器暴露的端口在mydomain.com:8060哪里。8060我的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
Run Code Online (Sandbox Code Playgroud)

我的 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;
    } 
}
Run Code Online (Sandbox Code Playgroud)

使用此配置,我不断收到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"
Run Code Online (Sandbox Code Playgroud)

ane*_*yte 5

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

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

127.0.0.1或者localhost对于 NGINX 容器来说是 NGINX 容器本身。您应该使用服务的名称:

upstream pgadmin {
    server pgadmin:8060;
}
Run Code Online (Sandbox Code Playgroud)

服务名称来自docker-compose.yml

upstream pgadmin {
    server pgadmin:8060;
}
Run Code Online (Sandbox Code Playgroud)

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

    location /pgadmin/ {
        proxy_set_header X-Script-Name /pgadmin;
        proxy_set_header Host $host;
        proxy_pass http://pgadmin;
        proxy_redirect off;
    }
Run Code Online (Sandbox Code Playgroud)