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

PGAdmin4通过Nginx反向代理配置后无法连接PostgreSQL 16服务器求助

PGAdmin4通过Nginx反向代理配置后无法连接PostgreSQL 16服务器求助

大家好,我现在碰到一个卡了好久的问题,想请各位帮忙排查下:

我在Debian 11主机上部署了PostgreSQL 16服务器,通过SSH登录主机用psql命令行操作一切正常。之后我装了PGAdmin4 Web版,还配置了Nginx反向代理,现在已经能通过浏览器访问PGAdmin4的Web界面(地址是https://<mydomain_name>/pgadmin4/),防火墙规则也配置到位了。

我的Nginx配置片段如下:

location /pgadmin4/ {
     proxy_pass http://127.0.0.1:80/pgadmin4/;
     proxy_redirect off;
     proxy_set_header Host $host;
     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 X-Script-Name /pgadmin4;
     proxy_buffering off;
}

但现在的核心问题是:在PGAdmin4的服务器连接对话框里配置后,始终无法连接到PostgreSQL,报错信息固定是Unable to connect to server: connection timeout expired.

我已经做了这些尝试性配置修改:

  • 修改/usr/pgadmin4/web/config.py,把DEFAULT_SERVER = '127.0.0.1'替换成了DEFAULT_SERVER = '0.0.0.0'
  • 在/etc/postgresql/16/main/pg_hba.conf中添加了一行规则:host all all 0.0.0.0/0 md5

PGAdmin4里的连接参数我是这么设置的(假设主机域名为example.tld):

Connection标签页

  • 主机名/地址:example.tld
  • 维护数据库:postgres
  • 用户名:postgres

SSH Tunnel标签页

  • 隧道主机:example.tld
  • 隧道端口:22
  • 用户名:pgadmin(一个普通的Unix用户)
  • 认证方式:密码

另外我还专门创建了一个bookstore数据库,用pgadmin用户可以通过shell命令psql -U pgadmin -d bookstore -h 127.0.0.1 -p 5432 -W正常访问,我也试过用这个数据库和用户在PGAdmin4里连接,结果还是一样的超时错误。

还有两个值得注意的现象:

  • 如果在连接时指定端口5432,会立刻弹出错误提示:Cannot use port 5432 because behind a reverse proxy on port 80
  • 如果在SSH Tunnel标签页填写不存在的用户(比如test)或者错误密码,会触发另一种不同的错误提示,这说明SSH隧道的认证流程其实是能正常触发的,但就是没法打通到数据库的连接

我查了好多文档和教程都没解决,实在卡在这里了,有没有大佬能给点排查思路或者解决方案?

备注:内容来源于stack exchange,提问作者user23917815

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:40:28