在AWS EC2部署Node服务遇Nginx connect ECONNREFUSED错误求助
AWS实例外网访问80端口报错ECONNREFUSED的排查与解决
核心问题现象
将Node服务通过Nginx反向代理部署到AWS EC2实例后,外网通过HTTP访问实例公网IP的80端口时,报错Error: connect ECONNREFUSED [INSTANCE PUBLIC IP]:80;但在实例内部执行curl http://localhost:80可正常获取Node服务响应,且Nginx日志会记录该请求,外网请求无对应日志。
已完成的排查信息
- 安全组已开放80端口
- VPC配置已开放所有端口
- Nginx配置正常,反向代理指向localhost:3000
- Nginx服务处于运行状态
netstat显示0.0.0.0:80处于监听状态,Node服务监听:::3000(IPv6)- SELinux处于permissive模式,无权限拦截
针对性排查与解决步骤
1. 重新校验安全组入站规则
- 登录AWS EC2控制台,进入实例详情页,确认关联的安全组。
- 检查HTTP (80) 入站规则的源地址是否为
0.0.0.0/0(允许所有外网IP访问),避免误设为仅VPC内网段(如172.31.0.0/16)。 - 确保规则协议为TCP,端口范围80,状态为“允许”。
2. 检查网络ACL(NACL)的双向规则
NACL是VPC的子网级防火墙,需同时配置入站和出站允许规则:
- 入站规则:添加优先级100的规则,允许TCP 80端口,源地址
0.0.0.0/0。 - 出站规则:添加优先级100的规则,允许TCP 32766-65535临时端口,目标地址
0.0.0.0/0(TCP连接需要返回流量,临时端口用于响应包)。 - 注意:NACL默认规则为拒绝所有,需确保允许规则优先级高于拒绝规则。
3. 确认子网路由表的互联网访问配置
- 进入VPC控制台,查看实例所在子网关联的路由表。
- 确认路由表中存在一条目标为
0.0.0.0/0,下一跳为**Internet Gateway(IGW)**的路由,且IGW已成功附加到当前VPC。
4. 优化Nginx监听配置
虽然netstat显示0.0.0.0:80已监听,但明确指定IPv4监听地址可避免潜在的协议兼容问题:
修改Nginx配置文件:
server { listen 0.0.0.0:80; # 明确监听所有IPv4地址 location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
重启Nginx:
sudo systemctl restart nginx
5. 排除本地网络限制
- 在本地执行
telnet [INSTANCE PUBLIC IP] 80,测试是否能建立TCP连接。若连接失败,尝试切换至手机热点等其他网络,排除本地路由器或防火墙的拦截。 - 确认本地网络可正常访问其他外网HTTP服务(如
curl http://example.com)。
6. 确认公网IP有效性
- 登录EC2控制台,核对实例当前的公网IPv4地址,确保与访问时使用的IP一致。临时公网IP会在实例重启后变更,若需固定IP,建议绑定弹性IP。
内容的提问来源于stack exchange,提问作者Moasfar Javed
相关产品推荐
相关产品推荐

