如果我指定了
listen_addresses = '*'
,那么我可以从另一个位于192.168的VM连接.0.191和来自本地主机的文件。
但是我似乎无法使用列表来告诉postgreSQL使用这两个地址。如果我将listen_addresses更改为列表:
listen_addresses = '192.168.0.191, localhost'
,那么我将无法再从192.168.0.191连接。
我注意到几乎所有示例在stackexchange上,将listen_addresses设置为“ *”。这是因为列表形式不起作用吗?
#1 楼
是的,可以将listen_addresses
设置为本地主机上要侦听的地址列表。在您的示例中:
listen_addresses ='192.168。 0.191,本地主机'
如果本地计算机具有IP
192.168.0.192
,则应指定该IP,而不是远程主机192.168.0.191
IP。 PostgreSQL无法绑定到远程主机的IP地址。您不是在说“允许谁连接”,而是在说“ PostgreSQL应该在哪些接口上接受连接”。接下来是“允许连接的人”位,并在
pg_hba.conf
中对其进行了配置。因此:尝试
'192.168.0.192, localhost'
。还是*
,因为您实际上可能想在所有网络接口上进行监听。#2 楼
我发现,如果您还要指定任何其他地址,则不必使用localhost
,而必须使用127.0.0.1
。因此,在我侦听Docker主机IP地址和本地主机的情况下,而不是外部IP,这是行不通的(我的Docker容器内部拒绝连接):
listen_addresses = '172.17.0.1, localhost'
但是这样做: br />
listen_addresses = '172.17.0.1, 127.0.0.1'
评论
有用。那么列表和“ *”之间有什么实际区别吗?
– zabouti
13年8月20日在3:37
@zabouti当然。如果您的服务器具有(例如)两个外部网络接口,则可以告诉PostgreSQL仅在其中一个上进行绑定,因此,甚至不可能与另一个上的Pg建立TCP连接。对于具有多个连接到不同安全域的接口的系统,这主要是额外的安全级别。与VLAN,虚拟交换机等结合使用时非常方便。最常见的用途是将其设置为localhost,这样就无法通过任何外部网络接口(仅是环回地址)进行TCP / IP连接。
–克雷格·林格(Craig Ringer)
13年8月20日在4:03
@CraigRinger:一个很好的答案!
–法郎
2014年2月25日下午5:27
@CraigRinger,您应该将这些评论添加到您的答案中。那是非常有用的信息。
–JoãoPortela
2014年12月18日上午10:57
是的,我认为评论可能比答案还要好。摇滚克雷格!
–黑暗无耻
2015年10月7日18:58