我有一个IP地址为192.168.0.192的VM,运行的是postgreSQL。

如果我指定了

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'。还是*,因为您实际上可能想在所有网络接口上进行监听。

评论


有用。那么列表和“ *”之间有什么实际区别吗?

– 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

#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'


#3 楼

条目0.0.0.0允许侦听所有IPv4地址,::允许侦听所有IPv6地址。如果列表为空,则服务器根本不监听任何IP接口,在这种情况下,只能使用Unix域套接字连接。