当使用网络服务器(都在同一台机器上)设置 postgreSQL 时,0.0.0.0:5432
打开是至关重要的,还是就127.0.0.1:5432
足够了?为什么或者为什么不?
总的来说,我试图了解端口在将流量转发到 pg 服务中所扮演的角色。
背景是我正在尝试配置 pgbouncer(一个连接池)与 postgresql 一起工作,所以需要确保相关端口是打开的。然而,在我这样做之前,我需要了解网络在此级别的工作方式。
当使用网络服务器(都在同一台机器上)设置 postgreSQL 时,0.0.0.0:5432
打开是至关重要的,还是就127.0.0.1:5432
足够了?为什么或者为什么不?
总的来说,我试图了解端口在将流量转发到 pg 服务中所扮演的角色。
背景是我正在尝试配置 pgbouncer(一个连接池)与 postgresql 一起工作,所以需要确保相关端口是打开的。然而,在我这样做之前,我需要了解网络在此级别的工作方式。
这是基本的 TCP/IP,而不是特定于 PostgreSQL 的。
如果唯一直接与数据库服务器对话的东西与数据库服务器位于同一主机上,则您只需要
listen_addresses = 127.0.0.1
,即只监听本地连接。例如,如果您有 pgbouncer 代理连接并接受不同端口上的连接。或者,如果所有用户与数据库的交互都是通过应用程序服务器和 webapp 发生的。该地址
127.0.0.1
是为本地主机保留的约定。是为了自言自语。没有实际理由允许(或阻止)从外部主机连接到 127.0.0.1,因为没有路由器会向您的主机发送带有该目标地址的数据包,并且您的机器永远不会响应对该地址的 ARP 请求。大多数操作系统会忽略来自外部网络接口的发往 127.0.0.1 的数据包,因为这显然是伪造的。
所以你想打开来自其他主机的连接。端口 5432 上的 0.0.0.0/0 是“让任何东西连接到端口 5432”。如果您不想对谁可以与服务器对话有更多限制,那么这是一个选项。
请注意,您可能必须同时调整防火墙规则和PostgreSQL 的
listen_addresses
指令。也有可能pg_hba.conf
。listen_addresses
控制 PostgreSQL 将接受哪些本地网络接口的连接尝试。pg_hba.conf
控制 PostgreSQL 将接受来自哪个远程主机的连接主机,假设它甚至正在监听。防火墙规则将通过基于源地址、目标端口和其他条件的过滤来阻止那些甚至到达 PostgreSQL 的连接尝试。