以下列出我遇到的常见原因

1. 防火墙

1) ping不通,则一般是防火墙未开放IP。

2) 若可以ping通,但telnet不通,则是开放了IP段访问但未开放端口。

以上问题,要么就关闭防火墙。

  1. systemctl stop firewalld.service && systemctl disable firewalld.service

要么就打开IP和端口的对外访问。

  1. firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.101.33" port protocol="tcp" port="80" accept"
  2. firewall-cmd --zone=public --add-port=5432/tcp --permanent
  3. firewall-cmd --reload

记住,firewall一定要执行reload命令才生效。

2. PG数据库配置

1) postgres.conf未开启访问IP限制

检查改文件的listen_address选项

  1. listen_addresses = 'localhost'

默认是如上的localhost,仅监听了本机的访问,需修改允许远程访问。

  1. listen_addresses = '*'

记得重启数据库

  1. systemctl restart postgresql.service

2) pg_hba.conf文件的登录限制

  1. # TYPE DATABASE USER ADDRESS METHOD
  2. local all all md5
  3. # IPv4 local connections:
  4. host all all 127.0.0.1/32 md5
  5. # IPv6 local connections:
  6. host all all ::1/128 md5
  7. # Allow replication connections from localhost, by a user with the
  8. # replication privilege.
  9. local replication all md5
  10. host replication all 127.0.0.1/32 md5
  11. host replication all ::1/128 md5

上面未允许其他IP对数据库的访问权限,所以在IPv4下,增加一行远程访问的权限。

  1. # TYPE DATABASE USER ADDRESS METHOD
  2. host all all 0.0.0.0/0 md5

记得重启数据库:

  1. systemctl restart postgresql.service