You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化PERN栈Nginx配置问题:无法访问pgAdmin容器

PERN栈Docker+Nginx部署:pgAdmin Bad Gateway问题修复

问题概述

使用Docker和Nginx部署PERN栈,期望通过单一URL访问前端容器与pgAdmin容器,前端可正常访问,但pgAdmin页面显示Bad Gateway。

错误原因及修正方案

1. Nginx中pgAdmin上游端口配置错误

pgAdmin容器内部运行在80端口,5050是容器映射到宿主机的端口。容器间通信需使用容器内部端口,而非宿主机映射端口。

2. 缺少pgAdmin上下文路径配置

pgAdmin默认以根路径(/)提供服务,当通过/pgadmin子路径访问时,需配置路径重写及上下文头信息,否则pgAdmin无法正确识别请求路径,导致资源加载失败或接口报错。


修正后的配置文件

修正后的nginx.conf

events {
  worker_connections 1024;
}

http {
  sendfile on;

  upstream app {
    server app:3000;
  }

  upstream pgadmin {
    server pgadmin:80; # 改为pgAdmin容器内部端口80
  }

  server {
    listen 80;

    location / {
      proxy_pass http://app;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }

    location /pgadmin {
      proxy_pass http://pgadmin/; # 末尾添加斜杠,确保路径转发正确
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Script-Name /pgadmin; # 告知pgAdmin上下文路径
      rewrite ^/pgadmin(.*)$ $1 break; # 重写请求路径,移除/pgadmin前缀
    }
  }
}

关键修改说明

  • 端口修正:将upstream pgadmin中的pgadmin:5050改为pgadmin:80,适配容器内部通信端口。
  • 路径重写:通过rewrite规则移除请求URL中的/pgadmin前缀,确保pgAdmin收到的请求路径符合其预期。
  • 上下文头设置:添加X-Script-Name头,告诉pgAdmin当前服务的上下文路径为/pgadmin,避免页面资源加载错误。

验证步骤

  1. 重启Nginx容器使配置生效:
    docker-compose restart nginx
    
  2. 访问pgAdmin页面:http://localhost:3050/pgadmin
  3. 若仍有问题,查看Nginx日志排查具体错误:
    docker-compose logs nginx
    
    同时确认pgAdmin容器是否正常运行:
    docker-compose ps pgadmin
    

内容的提问来源于stack exchange,提问作者Teehbow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:52:47