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
相关产品推荐
相关产品推荐

