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

AWS EC2 Ubuntu实例仅监听22端口,Node应用部署受阻

解决Node.js应用部署到AWS EC2 Ubuntu实例后仅监听SSH端口22的问题

我明白你现在的困惑——明明AWS安全组已经开了80端口,执行netstat -ntlp | grep LISTEN却只看到22端口在监听,但又说能访问Node服务器,这确实有点矛盾。咱们一步步拆解排查:

1. 先检查Node应用的监听配置

这是最常见的问题:很多Node默认会绑定127.0.0.1(本地回环地址),这时候进程虽然在运行,但只有实例内部能访问,外部看不到这个监听端口。

  • 打开你的Node代码,确认服务器监听的地址是0.0.0.0(允许所有IP访问),而不是127.0.0.1或者localhost。比如:
    // 正确写法:允许外部访问
    app.listen(80, '0.0.0.0', () => {
      console.log('Server running on public port 80');
    });
    
    // 错误写法:仅本地能访问
    app.listen(80, '127.0.0.1', () => { ... });
    
  • 另外,确认你的Node应用实际用的是80端口吗?如果用的是3000、8080这类端口,那netstat里自然不会显示80的监听记录,同时要确保安全组也开放了对应端口。

2. 验证Ubuntu本地防火墙状态

你提到暂不认为是防火墙问题,但还是建议快速确认下Ubuntu自带的ufw状态:

  • 执行命令查看当前防火墙规则:
    sudo ufw status
    
  • 如果ufw是开启状态,确保已经允许目标端口的TCP流量:
    sudo ufw allow 80/tcp  # 替换成你的Node应用端口
    sudo ufw reload
    

3. 直接定位Node进程的监听信息

用更精准的命令查看Node进程到底在监听什么IP和端口:

  • 用netstat过滤Node进程:
    netstat -ntlp | grep node
    
  • 或者用更现代的ss命令,输出更清晰:
    ss -tulpn | grep node
    

如果结果显示127.0.0.1:xxxx,那就是地址绑定的问题,改成0.0.0.0即可;如果端口不是80,那要同步更新安全组的端口规则。

4. 关于“能访问Node服务器但异常”的补充说明

如果你是在EC2实例内部通过curl 127.0.0.1或者本地IP访问到的,那其实外部是无法访问的——这只是本地回环的访问,不算真正的外部访问。建议从你的本地电脑(比如家里的机器)用EC2的公网IP访问试试,看是否能正常打开。
如果外部确实能访问,但netstat看不到80端口监听,那大概率是用了反向代理(比如Nginx),这时候是Nginx在监听80端口,然后把请求转发到Node应用的端口,这种情况下netstat里会显示Nginx的监听进程。

按照上面的步骤排查,应该就能找到问题所在并解决啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:18:47