AWS EC2运行80端口Node.js HTTP服务,外部访问报Connection refused排查
核心问题定位
从你贴出的netstat输出可以直接找到连接失败的根因:
你的Node.js服务当前仅绑定在127.0.0.1:80地址上,这个回环地址代表服务只允许服务器本机内部的请求访问,所有外部网络发起的连接请求,哪怕顺利到达服务器,内核检测到该端口没有对外的监听入口,会直接返回Connection refused,根本不会走到安全组、防火墙这类网络规则的检测流程中。
你之前完成的安全组配置、VPC ACL放行、系统防火墙检查的操作都是正确的,但这类网络层规则只能控制数据包能不能到达服务器网卡,无法突破服务本身的监听地址限制。你排查到系统未安装独立的iptables服务属于正常现象,当前多数新版Linux发行版默认使用nftables作为底层防火墙组件,不存在对应的iptables服务单元不会影响网络连通性。
参考你贴出的监听状态输出:
sudo netstat -tnlp | grep 80 tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN 3657/node正常允许外部访问的服务,监听地址列应显示为
0.0.0.0:80(监听所有IPv4地址)或:::80(监听所有IPv6地址)。
修复操作步骤
- 修改Node.js服务的启动代码,将监听地址从
127.0.0.1调整为0.0.0.0。
如果代码中是类似写法:
将第二个参数替换为app.listen(80, '127.0.0.1', () => { console.log('服务启动成功') })0.0.0.0即可:app.listen(80, '0.0.0.0', () => { console.log('服务启动成功') }) - 重启Node.js服务后,重新执行
netstat命令确认监听地址已更新为0.0.0.0:80 - 从本地机器重新测试公网IP的80端口连接,即可正常获取服务响应。
补充排查方向(完成上述修复仍无法连接时检查)
- 确认公网IP是否正确绑定到当前实例的网卡,没有出现IP指向配置错误
- 如果实例部署在容器、Docker这类环境中,检查端口映射规则是否正确将宿主机80端口转发到容器内的Node服务
- 检查云服务商是否有额外的主机级访问控制策略(如主机安全组件、安全拦截规则)拦截80端口入站流量
内容的提问来源于stack exchange,提问作者HAL
相关产品推荐
相关产品推荐

