You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon EC2中Node.js应用监听80端口无法访问排查求助

既然你已经检查过AWS安全组和官方文档了,我来给你梳理几个最容易踩坑的排查点,帮你定位问题:

常见排查方向

1. 确认Node.js应用监听的是0.0.0.0而非localhost

很多开发者会下意识把应用监听地址设为localhost或127.0.0.1,但这个地址只允许实例内部访问,公网请求根本传不进来。你可以登录EC2实例,用以下命令检查监听端口的绑定地址:

netstat -tulpn | grep :80
# 或者用更现代的ss命令
ss -tulpn | grep :80

如果输出里的地址是127.0.0.1:80,赶紧修改代码里的监听配置,把地址改成0.0.0.0,比如:

app.listen(80, '0.0.0.0', () => {
  console.log('Server running on port 80');
});

改完重启应用再测试访问。

2. 检查EC2实例本地防火墙规则

AWS安全组是外部防护,但实例本身可能还有本地防火墙(比如Ubuntu的ufw、CentOS的iptables)限制了80端口:

  • Ubuntu/Debian系统:执行sudo ufw status查看规则,如果没有允许80端口的条目,运行sudo ufw allow 80/tcp,然后重启ufw生效。
  • CentOS/RHEL系统:执行sudo iptables -L -n检查规则,若没有ACCEPT tcp dpt:80的条目,添加规则:sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT,再用sudo service iptables save保存规则(不同版本命令可能略有差异)。

3. 验证实例状态与公网IP正确性

先到AWS控制台确认两件事:

  • 实例状态是running,没有被意外停止或终止;
  • 你访问的公网IP和实例控制台显示的完全一致,且实例已经分配了公网IP(VPC子网中的实例需要开启自动分配公网IP,或者绑定了弹性IP)。

4. 检查Node.js应用是否正常运行

登录实例后,用ps aux | grep node查看Node进程是否存在。如果进程消失,说明应用可能崩溃了,得排查启动日志:

  • 如果是直接用命令启动的,查看终端输出的报错信息;
  • 如果是用systemd托管的服务,执行journalctl -u your-app-service-name查看详细日志,常见问题比如端口被占用、依赖包缺失、代码语法错误等。

5. 先测试实例内部访问情况

在EC2实例内部,用curl http://localhost或curl http://<实例私网IP>测试能否正常获取响应:

  • 如果内部访问失败,问题肯定出在应用本身或本地配置,和安全组无关;
  • 如果内部能正常访问,外部不行,再回到网络层面(路由表、NAT网关/IGW)排查。

6. VPC环境下检查路由表配置

如果你的实例在VPC子网中,必须确保子网的路由表包含指向互联网网关(IGW)的条目。到VPC控制台找到对应子网的路由表,检查是否有0.0.0.0/0指向IGW的规则——没有这条规则的话,实例无法和公网通信。


内容的提问来源于stack exchange,提问作者Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:05:53