Debian 9上PostgreSQL 9.6仅本地可连,外部无法连接求助
解决Debian 9上PostgreSQL 9.6无法接受远程连接的问题
我来帮你一步步排查这个问题,结合你提到Ubuntu 16.04上的PG 9.5正常、两台机器其他服务都能接收外部连接的情况,问题大概率出在PostgreSQL的自身配置上,咱们从核心配置项开始检查:
1. 调整PostgreSQL的监听地址配置
Debian上PostgreSQL 9.6的主配置文件默认在/etc/postgresql/9.6/main/postgresql.conf,你需要修改监听地址:
- 打开文件,找到
listen_addresses这一行,默认可能是listen_addresses = 'localhost'(只允许本地连接) - 将其修改为
listen_addresses = '*'(允许所有IP访问),或者指定特定的IP段(比如你的局域网IP段,更安全) - 修改完成后,重启PostgreSQL服务生效:
sudo systemctl restart postgresql
2. 配置访问控制规则(pg_hba.conf)
接下来要在访问控制列表里添加允许远程连接的规则,配置文件同样在/etc/postgresql/9.6/main/目录下:
- 打开
pg_hba.conf,在文件合适的位置(比如本地规则之后)添加一条规则,示例:
如果只是测试,可以暂时用允许所有IP的规则(生产环境不建议):# 允许192.168.1.0/24网段的机器用密码连接所有数据库 host all all 192.168.1.0/24 md5host all all 0.0.0.0/0 md5 - 注意规则的顺序很重要,PostgreSQL会从上到下匹配规则,所以不要把这条规则放在拒绝类规则之后
- 同样重启PostgreSQL服务让规则生效
3. 确认防火墙端口放行
虽然你提到其他服务能正常接收外部连接,但还是要确认Debian的防火墙有没有放行PostgreSQL默认的5432端口:
- 如果用的是ufw防火墙,先查看状态:
如果没有5432端口的允许规则,添加:sudo ufw statussudo ufw allow 5432/tcp - 如果用的是iptables,添加放行规则:
sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
4. 验证服务监听状态
修改配置后,检查PostgreSQL是否真的在监听外部IP:
ss -tulpn | grep postgres
如果输出里有0.0.0.0:5432或者你指定的IP,说明监听配置生效了;如果只有127.0.0.1:5432,那说明之前的配置没改对,再回去检查postgresql.conf。
5. 远程连接测试
最后从你的其他机器上测试连接,用命令:
psql -h <Debian机器的IP地址> -U <PostgreSQL用户名> -d <要连接的数据库名>
如果还是报错,把具体的错误信息贴出来,能更快定位剩余问题。
另外,你可以对比Ubuntu 16.04上PG 9.5的postgresql.conf和pg_hba.conf配置,两者的差异很可能就是问题所在。
内容的提问来源于stack exchange,提问作者Darth Kangooroo
相关产品推荐
相关产品推荐

