AWS EC2部署Node.js应用遇curl 7连接失败问题求助
问题诊断与解决步骤
1. 核查EC2安全组的5000端口权限
- 先确认安全组入站规则里,TCP 5000端口是否对共享主机的公网IP开放,或者是否临时允许所有IP(0.0.0.0/0)访问:
- 如果之前只加了你的本地IP,共享主机IP不在白名单里会被直接拦截。临时添加
0.0.0.0/0测试,能通的话就把规则改成仅允许共享主机IP访问,兼顾安全性。
- 如果之前只加了你的本地IP,共享主机IP不在白名单里会被直接拦截。临时添加
2. 检查EC2系统级防火墙
部分EC2镜像(比如Amazon Linux 2、CentOS)自带firewalld或iptables,即使安全组开了端口,系统防火墙可能没放行5000:
- 先查看当前规则:
# firewalld用户执行 sudo firewall-cmd --list-all # iptables用户执行 sudo iptables -L -n - 若5000端口不在允许列表,添加放行规则:
# firewalld永久生效 sudo firewall-cmd --add-port=5000/tcp --permanent sudo firewall-cmd --reload # iptables永久生效 sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT sudo service iptables save
3. 确认Node.js应用的监听状态
你的代码里app.listen(port, '0.0.0.0')配置是对的,但要验证实际监听情况:
- 登录EC2查看
config.json的port值是否为5000,或者看应用启动日志是否输出Server Running Live on Port 5000。 - 用命令检查端口监听:
正常输出应该显示sudo ss -tulpn | grep 50000.0.0.0:5000,且关联进程是你的Node.js应用。
4. 排查共享主机的出站端口限制
部分共享主机服务商默认限制非标准端口的出站访问,只开放80、443这类常用端口:
- 在共享主机上测试curl其他公开的5000端口服务,若同样失败,说明是服务商限制了出站规则。
- 这种情况要么联系服务商申请开放5000端口,要么把Node.js应用改成监听80/443端口(需要root权限,或搭配Nginx反向代理)。
5. 检查子网网络ACL规则
如果EC2所在子网有自定义网络ACL,可能拦截了5000端口的流量:
- 进入AWS控制台找到对应子网的网络ACL,确认入站规则允许TCP 5000端口,出站规则允许临时端口的响应流量(一般设置为允许所有出站即可)。
内容的提问来源于stack exchange,提问作者Djen Nik
相关产品推荐
相关产品推荐

