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

enter image description here

我的设置是:

我更新了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. added "Inbound rule" for port 5432 from any IPv4: enter image description here

在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.

我的设置出了什么问题?我在这个论坛和互联网上try 了很多不同的帖子,都没有用.(( 我是否还需要使用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的时候,你就完成了!

您将能够从实例外部进行连接

Postgresql相关问答推荐

我无法让pg_cron扩展在最新的Postgres 16图像中工作

无法在PostgreSQL中创建方案和表

通过窗口函数收集反连接结果?

从数据集中提取彼此喜欢的用户(&Q;)

在Axum 0.5中,如何在一个请求处理程序中同时使用数据库和路径解析?

Select 与输入数组完全相交的所有行?

Postgres:一次插入多行时自定义upsert(存储过程?)?

使用 pgx 扫描范围类型

为什么这里的默认格式不同? (ISO 8601 的两种不同实现)

Rails Migration 使用转换将字符串转换为整数

消除 PostgreSQL SELECT 语句中的重复行

推送到 Heroku 时出现带有 Postgres 的 Rails 迁移错误

表或列名不能以数字开头?

无法向 postgresql 数据库授予用户权限(对于 rails 应用程序)

如何使用 SpringBoot + JPA 存储 PostgreSQL jsonb?

mysql_insert_id 替代 postgresql

当记录包含 json 或字符串的混合时,如何防止 Postgres 中的invalid input syntax for type json

PostgreSQL:使用 psql 命令行实用程序时 Windows 上的编码问题

如何使用 PostgreSQL 触发器来存储更改(SQL 语句和行更改)

PostgreSQL - 作为表名的动态值