我有一个奇怪的情况,我已经创build了第二个postgres服务器,最终将成为我的当前主控的奴隶,无论如何,目前我已经安装了postgrestesting目的,并testing从其他主机的连接。
在我的postgresql.conf中,我有一个很好的方法: listen_addresses = '*'# what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) port = 5432 listen_addresses = '*'# what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) port = 5432
然后在我的pg_hba.conf中有:
# allow all connections, testing only, comment in production host all all 0.0.0.0/0 trust
这个postgres服务器运行在freebsd监狱,所以有两个IP地址:
root@postgres ~# telnet 10.1.1.19 5432 Trying 10.1.1.19... telnet: connect to address 10.1.1.19: Connection refused telnet: Unable to connect to remote host root@postgres ~# telnet 127.0.1.19 5432 1 Trying 127.0.1.19... Connected to 127.0.1.19. Escape character is '^]'. ^CConnection closed by foreign host. root@postgres ~# ifconfig em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=4219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO> ether 00:25:90:27:d8:24 inet 10.1.1.19 netmask 0xffffffff broadcast 10.1.1.19 media: Ethernet autoselect (1000baseT <full-duplex>) status: active lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6> inet 127.0.1.19 netmask 0xffffffff groups: lo
所以,正如你所看到的,我可以在端口5432,但只使用环回地址,所以然后我尝试一个简单的
root@postgres ~# psql -h 127.0.1.19 psql: FATAL: no pg_hba.conf entry for host "127.0.1.19", user "root", database "root", SSL off
为什么这个基本连接被阻塞,因为我的hba.conf有ALL,另外为什么我不能通过10.1.1.19的本地地址连接呢?
netstat显示以下输出:
Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp4 0 0 127.0.1.19.postgresql *.* LISTEN
注意:我在另外一台服务器上安装了另外一台监狱,看起来是相同的设置,在版本9.3.5和这个新服务器上(有问题)在9.6.3上
编辑:当改变configuration听0.0.0.0我得到一个netstat输出:
Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp4 0 0 127.0.1.19.postgresql *.* LISTEN tcp4 0 0 10.1.1.19.3100 *.* LISTEN
你可以看到,SSH能够监听局域网地址10.1.1.19(端口3100),所以它不能成为一个监狱networking问题,它必须是与postgres相关的东西。
PostgreSQL 手册说关于listen_addresses这个:
listen_addresses(string)
指定服务器要侦听来自客户端应用程序的连接的TCP / IP地址。 该值采用逗号分隔的主机名和/或数字IP地址列表的forms。 特殊条目*对应于所有可用的IP接口。 条目0.0.0.0允许监听所有的IPv4地址,::允许监听所有的IPv6地址。 如果列表为空,则服务器根本不侦听任何IP接口,在这种情况下,只能使用Unix域套接字来连接它。 默认值是localhost,只允许进行本地TCP / IP“环回”连接。 虽然客户端身份validation(第20章)允许对谁可以访问服务器进行细粒度的控制,但listen_addresses控制哪些接口接受连接尝试,这有助于防止在不安全的networking接口上重复发出恶意连接请求。 此参数只能在服务器启动时设置。
可能是有一些错误*作为听力参数。 尝试将其设置为0.0.0.0,强制postgres监听所有的IP地址,并可以解决您的问题。
在注意到所有这些没有明显原因的随机问题后,我假定更多的configuration文件closures,我没有安装postgres,清理/ var / db / postgres和/ usr / etc / postgres文件夹,然后重新安装。
现在一切都按预期工作,所以我假设安装最初默默地失败了。