真的可以将 listen_addresses 设置为列表吗?

zab*_*uti 40 postgresql

我有一个运行 postgreSQL 的 IP 地址为 192.168.0.192 的虚拟机。

如果我指定

listen_addresses = '*'
Run Code Online (Sandbox Code Playgroud)

然后我可以从位于 192.168.0.191 的另一个虚拟机和本地主机连接。

但是我似乎无法使用列表来告诉postgreSQL 使用这两个地址。如果我将 listen_addresses 更改为列表:

listen_addresses = '192.168.0.191, localhost'
Run Code Online (Sandbox Code Playgroud)

然后我无法再从 192.168.0.191 连接。

我注意到 stackexchange 上的几乎所有示例都将 listen_addresses 设置为“*”。这是因为列表形式不起作用吗?

Cra*_*ger 56

是的,listen_addresses可以设置为本地主机上的地址列表以绑定到侦听。

在你的例子中:

listen_addresses = '192.168.0.191,本地主机'

如果本地机器有 IP 192.168.0.192,您应该指定该 IP,而不是远程主机192.168.0.191IP。PostgreSQL 无法绑定到远程主机的 IP 地址。

您不是说“允许谁连接”,而是说“PostgreSQL 应该接受哪些接口上的连接”。“谁可以连接”位是下一个,并在pg_hba.conf.

所以:试试'192.168.0.192, localhost'。或者只是*,因为您可能实际上想要监听所有网络接口。

  • @zabouti 当然。如果您的服务器有(比如说)两个外部网络接口,您可以告诉 PostgreSQL 只绑定其中一个,因此甚至不可能在另一个上与 Pg 建立 TCP 连接。对于具有多个连接到不同安全域的接口的系统来说,这主要是额外的安全级别。与 VLAN、虚拟交换机等结合使用非常方便。最常见的用途是将其设置为“localhost”,这样 TCP/IP 连接就不可能来自任何外部网络接口,只有环回地址。 (12认同)

小智 6

我发现如果您还指定任何其他地址,则localhost不需要使用它。127.0.0.1

因此,在我监听 Docker 主机 IP 地址和本地主机(但不监听外部 IP)的情况下,这是行不通的(我的 Docker 容器内部连接被拒绝):

listen_addresses = '172.17.0.1, localhost'
Run Code Online (Sandbox Code Playgroud)

但这确实:

listen_addresses = '172.17.0.1, 127.0.0.1'
Run Code Online (Sandbox Code Playgroud)