部署在AWS EC2的Express API无法访问?排查连接超时问题
问题排查与解决方案
你的报错connect ETIMEDOUT 172.31.2.86:5432和CORS配置无关,这个错误是Express应用无法连接PostgreSQL数据库导致的,以下是你可能遗漏的关键配置:
1. PostgreSQL数据库访问权限配置
- 若PostgreSQL部署在同一EC2实例:
- 修改
pg_hba.conf,添加允许EC2内网IP连接的规则:host all all 172.31.2.86/32 scram-sha-256 - 编辑
postgresql.conf,将listen_addresses设为'*'或指定该内网IP,允许本地应用连接,之后重启PostgreSQL服务。
- 修改
- 若PostgreSQL部署在AWS RDS/外部服务器:
- 检查RDS安全组,确认已开放5432端口给EC2实例的内网IP;若是外部数据库,需确保数据库服务器的防火墙/安全组允许EC2的IP访问5432端口。
2. EC2安全组规则配置
- 出站规则:确认EC2安全组允许访问数据库的5432端口(目标地址为数据库IP/网段),默认出站规则通常全开放,但自定义规则需排除限制。
- 入站规则:若要从本地访问EC2的3000端口API,需添加入站规则:类型选
Custom TCP,端口3000,来源设为你的本地公网IP(测试时可临时用0.0.0.0/0,生产环境禁用)。
3. 应用数据库连接参数校验
- 检查Express应用的数据库连接配置,确保IP、端口、用户名、密码与数据库实际配置一致。以
pg库为例,正确的连接配置示例:const { Pool } = require('pg'); const pool = new Pool({ user: 'db_user', host: '172.31.2.86', database: 'target_db', password: 'db_password', port: 5432, });
4. EC2本地防火墙配置
- 若EC2实例启用了本地防火墙(如Ubuntu的
ufw、CentOS的firewalld),需确认:- 允许出站访问5432端口(供应用连数据库);
- 允许入站访问3000端口(供本地调用API)。
内容的提问来源于stack exchange,提问作者Blockchain Kid
相关产品推荐
相关产品推荐

