我的电脑上目前有一个postgres数据库。我正在linux服务器上部署一个使用该数据库的flask应用程序,需要从linux机器远程连接到我的数据库。我在linux机器上使用的命令是
psql -h 12.345.678.901 -p 5432 -U postgres
其中12.345.678.901是我的本地PC ip地址。当我这样做时,我得到错误
psql: error: connection to server at "12.345.678.901", port 5432 failed: Connection timed out
Is the server running on that host and accepting TCP/IP connections?
我想强调的是,这种联系并没有被"拒绝",它只是时间安排(与许多与此主题相关的问题不同(。我不确定这是否有助于确定根本问题。我知道这是一个非常常见的问题,但没有任何解决方案对我有效。这些解决方案包括更新pg_hba.conf、postgresql.conf、防火墙配置等。我做到了。我的pg_hba.conf文件看起来像这个
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all scram-sha-256
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
host all all 0.0.0.0/0 trust
# IPv6 local connections:
host all all ::1/128 scram-sha-256
host all all ::0/0 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all scram-sha-256
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
host all all 0.0.0.0/0 md5
我的postgresql.conf看起来像这个
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
这些文件位于C:\Program files\PostgreSQL\14\data中。我已经手动检查了这些更改是否保存并使用psqlshell实现。在对这些文件进行了所有更改后,我也重新启动了postgres。
我已经实现的其他修复:
在本地PC上设置防火墙规则,以便使用Windows Defender firewall 向入站和出站TCP/IP连接打开端口5432
设置远程linux PC防火墙以允许通过端口5432与线路连接
"sudo ufw allow 5432/tcp"&"sudo ufw允许postgres/tcp">
尝试了本地PC IPv4地址和默认网关地址(老实说,我不确定该使用哪一个(
为我的物理路由器设置一个规则,允许连接到端口5432
我想不出这能救我的命。任何帮助都将不胜感激。
对于其他正在努力解决这个问题的人,经过数周的挖掘,我终于找到了解决方案。您必须在postgres配置文件中使用的ip地址是ROUTER的ip地址。我试过电脑上的每一个ip地址,都没有用。只有当我打开我的互联网提供商应用程序并找到我的路由器ip时,我才终于能够连接。最重要的是,当我用ssh连接到远程服务器时,它会说"从{路由器ip地址}连接"。希望这能有所帮助。