本地Node.js连接AWS RDS Postgres时出现connect ETIMEDOUT错误求助
本地Node.js Express应用连接AWS RDS Postgres数据库遇ETIMEDOUT错误
测试本地Node.js Express应用连接AWS RDS上的Postgres数据库时,出现connect ETIMEDOUT 172.31.97.43:5432错误。已完成AWS RDS的以下配置:
- 入站和出站规则设为允许所有流量
- 公开访问权限设为Yes
数据库连接配置文件database.ts代码如下:
import {Pool} from "pg"; export const client = new Pool({ host : 'omerenma.cs6txkhiualn.us-east-1.rds.amazonaws.com', user : '********', password : '********', port : 5432, connectionTimeoutMillis:30000 }) client.connect(function(err) { if (err) { console.error('Database connection failed: ' + err.stack); return; } console.log('Connected to database.'); }); // 此处存在问题:连接尝试时立即终止连接 ***client.end()***
错误截图:
排查与解决建议
修复代码逻辑
代码中client.connect后立即调用client.end(),会导致连接刚发起就被强制关闭,直接移除这行代码,避免提前终止连接流程。验证网络连通性
在本地终端执行以下命令测试RDS端点的5432端口是否可达:nc -zv omerenma.cs6txkhiualn.us-east-1.rds.amazonaws.com 5432 # Windows系统可使用 telnet omerenma.cs6txkhiualn.us-east-1.rds.amazonaws.com 5432如果命令返回无法连通,说明本地网络(防火墙、路由器、ISP)拦截了5432端口流量,需检查本地网络设置。
复查AWS安全配置
- 确认RDS实例关联的安全组确实已开放入站5432端口(源设为0.0.0.0/0),且安全组正确绑定到实例。
- 检查RDS所在VPC的网络访问控制列表(NACL),确保入站和出站规则都允许5432端口的流量(NACL为无状态,需双向配置)。
- 确认RDS实例的公开访问设置为Yes,且所在子网已关联互联网网关,确保实例能被公网访问。
核对数据库权限
登录Postgres数据库,执行以下命令检查连接规则,确保允许外部IP访问:SELECT * FROM pg_hba_file_rules;若规则中未允许0.0.0.0/0或你的本地IP,需修改
pg_hba.conf添加对应规则并重启数据库。确认实例状态与端点
在AWS RDS控制台确认实例处于可用状态,核对端点地址omerenma.cs6txkhiualn.us-east-1.rds.amazonaws.com是否与配置一致。
内容的提问来源于stack exchange,提问作者Onyebuchi Kingsley Omerenma
相关产品推荐
相关产品推荐

