部署在AWS EC2实例的Node.js应用无法通过浏览器访问如何排查?
AWS EC2 Node.js服务无法公网访问排查方案
- 确认实例网络ACL配置
安全组是实例级防火墙,而子网关联的网络ACL是子网级防护。请检查对应子网的网络ACL入站、出站规则,确认已放行8080端口的TCP流量,默认配置下网络ACL为全量放行,若您手动修改过规则需补全端口配置。 - 检查实例本地防火墙规则
AWS官方Linux AMI、Ubuntu等系统默认可能启用ufw或iptables防护,登录EC2实例执行以下命令验证:sudo ufw status
若状态为active,执行以下命令放行端口:sudo ufw allow 8080/tcp && sudo ufw reload
若使用iptables,执行以下命令查看规则:iptables -L -n
确认没有拦截8080端口的入站规则。 - 验证服务端口监听状态
在实例内执行命令确认端口监听范围:ss -tulpn | grep 8080
正常输出应显示监听地址为0.0.0.0:8080或:::8080,若仅显示127.0.0.1:8080说明服务仅绑定了本地回环地址,无法对外提供访问。 - 核对服务监听协议一致性
您的代码打印日志写死了https://前缀,但实际运行日志显示服务跑在http协议的8080端口,请确认:- 服务是否实际配置了SSL证书,若没有配置HTTPS,访问时需使用
http://前缀而非https:// - 是否有环境变量覆盖了默认端口配置,导致实际监听端口和代码默认的8443不一致
- 服务是否实际配置了SSL证书,若没有配置HTTPS,访问时需使用
- 验证实例网络属性
确认您的EC2实例部署在公有子网,已分配公网IP/弹性IP,且子网关联的路由表已配置指向互联网网关(IGW)的默认路由0.0.0.0/0,私有子网内的实例无公网访问能力。 - 本地连通性测试
先在EC2实例内部执行curl命令验证服务可用性:curl http://127.0.0.1:8080
若该请求能正常返回响应,说明服务本身运行正常,问题出在外部网络链路;若请求失败,优先排查Node.js服务自身的配置问题。 - 复核安全组规则
确认安全组入站规则中8080端口的TCP协议规则,源地址配置为0.0.0.0/0(或您的本地公网IP),避免规则配置错误导致流量被拦截。
内容的提问来源于stack exchange,提问作者Saurabh Yadav
相关产品推荐
相关产品推荐

