繁体   English   中英

无法从外部连接到在 AWS EC2 实例上运行的 Postgres

[英]Can't connect from outside to Postgres running on AWS EC2 instance

我已经在我的 EC2 ubuntu(18) 上安装了 Postgres 10。 但我无法从我的本地 Mac 访问它。 得到这个错误。

在此处输入图像描述

我的设置是:

我更新了 Postgres 配置:

  1. 到 /etc/postgresql/10/main/pg_hba.conf 添加这些行:
    host    all             all             0.0.0.0/0               md5
    host    all             all             ::/0                    md5
  1. 在 /etc/postgresql/10/main/postgresql.conf 中更改了这一行:
    listen_addresses = '*'                  # what IP address(es) to listen on;
  1. 我确实将密码设置为默认的“postgres”用户,我用它从外部连接到数据库;

在 EC2 实例上,我更改了:

  1. 从任何 IPv4 为端口 5432 添加“入站规则”: 在此处输入图像描述

在 EC2 实例上,此命令返回已公开的端口:

ubuntu@ip-XXXXXXXXXX:~$ netstat -nat |grep :5432
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN     
tcp6       0      0 :::5432                 :::*                    LISTEN   

看起来 EC2 实例实际上并没有暴露这个端口。 其他端口如:80 或:22 可以正常访问,但端口:5432 返回错误:

➜  ~ nc -zv XX.XXX.XXX.XXX 80  
Connection to XX.XXX.XXX.XXX port 80 [tcp/http] succeeded!

➜  ~ nc -zv XX.XXX.XXX.XXX 5432
nc: connectx to XX.XXX.XXX.XXX port 5432 (tcp) failed: Operation timed out

我的 EC2 实例上也安装了 Nginx,它的配置是:

server {
  charset utf-8;
  listen 80;
  server_name XXXXXXXXXXXXXXX.ca; # <--- hidden domain name
  location / {
    root /opt/frontend/develop/dist/tweeter-ui/;
    try_files $uri /index.html;
  }
  location /api/ {
    proxy_pass http://localhost:8080/api/;
  }
}

PostgreSQL 服务正在运行:

ubuntu@ip-XXXXXXXXXX:~$ service postgresql status
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Wed 2022-11-23 22:41:33 UTC; 1h 6min ago
  Process: 6283 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 6283 (code=exited, status=0/SUCCESS)

Nov 23 22:41:33 ip-XXXXXXXXXX systemd[1]: Starting PostgreSQL RDBMS...
Nov 23 22:41:33 ip-XXXXXXXXXX systemd[1]: Started PostgreSQL RDBMS.

我的设置有什么问题? 我在这个论坛和 Inte.net 上尝试了很多不同的帖子,但没有任何帮助。 ((我还必须使用 Postgres 路由配置 Nginx 吗?

您遵循了正确的步骤。 问题是防火墙阻塞了 Postgres 的 5432 端口,因此需要将其添加到防火墙允许列表中。

sudo ufw allow 5432/tcp

当你运行$ sudo ufw status时,你会看到:

Status: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
5432/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
5432/tcp (v6) ALLOW Anywhere (v6)

然后运行sudo firewall-cmd --reload ,当你看到success时,你就完成了!

您将能够从实例外部连接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM