【问题标题】:PSQL server listening but not accepting connexions from outsidePSQL 服务器侦听但不接受来自外部的连接
【发布时间】:2018-03-27 21:03:09
【问题描述】:

我有一台安装了 PostgreSQL (PSQL) 9.6 服务器的 Debian 9 机器。 此 PSQL 服务器不接受来自其他机器的任何连接(仅来自其自身)。

我一直在尽力解决这个问题,我想你们中的一些人会认为这是一个 PostgreSQL 论坛的主题,但是让我解释一下:

我还有一台 Ubuntu 16.04 机器,同时运行 PostgreSQL 9.5 服务器,我没有这个问题。

来自其他机器(ping、x2gp)的 Debian 和 Ubuntu 机器的非 PSQL 连接工作正常。防火墙已停用。 接受连接的 PSQL 服务器规则基于名为 pg_hba.conf 的配置文件。它在Debian机器上的内容是:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             192.168.1.0/24          md5

在 Ubuntu 机器上,文件非常相似:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             192.168.1.0/24          md5

我还尝试将 config_file 从 Ubuntu 机器复制粘贴到 Debian 机器,看看它是否有效。它没。 当然,我不会忘记重启 PSQL 服务器。

现在当我做 netstat -an | grep 5432(PSQL 服务器监听端口 5432),在 Debian 机器上,我得到:

$ netstat -an | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:5432                :::*                    LISTEN     
unix  2      [ ACC ]     STREAM     LISTENING     15854569 /var/run/postgresql/.s.PGSQL.5432

根据我对网络的了解,这确实意味着机器只在 5432 端口上侦听 localhost 入站连接。

但是当我在 Ubuntu 机器上做同样的事情时,我得到:

$ netstat -an | grep 5432
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN     
tcp6       0      0 :::5432                 :::*                    LISTEN     
unix  2      [ ACC ]     STREAM     LISTENING     19472    /var/run/postgresql/.s.PGSQL.5432

这意味着,我相信它会监听来自任何 IP 地址的入站连接。

但是为什么呢?

为什么两台机器的行为会有这种差异?

【问题讨论】:

    标签: postgresql networking


    【解决方案1】:

    查看您的 postgresql.conf,查找 listen_addresses,您应该有 0.0.0.0 用于 ipv4 和 :: 用于 ipv6。

    描述 -> https://www.postgresql.org/docs/9.1/static/runtime-config-connection.html

    【讨论】:

    • 再次您好,感谢您的帮助。我确实在 postgresql.conf 中发现了一条看起来像问题根源的行:#listen_addresses = 'localhost' 我将其更改为 #listen_addresses = '*' 但即使在完全重新启动操作系统后,它仍然无法正常工作,结果netstat 命令也是一样的。
    • 您必须删除开头的主题标签,因为它是评论并且被忽略
    【解决方案2】:

    而且,在我对你的回答发表评论后,我注意到这一行

    #listen_addresses = 'localhost'     
    

    以#开头。 我删除了它以取消注释该行,以便它可以运行并且现在可以工作了。

    谢谢!

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      相关资源
      最近更新 更多