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

Google VM实例(Ubuntu16.0)Node应用8080端口无法访问求助

排查Google Cloud VM上Node.js 8080端口无法外部访问的问题

我之前在GCP上部署Node.js应用时也碰到过几乎一模一样的情况,给你几个针对性的排查方向,按优先级来:

  • 先确认Node.js应用的监听地址
    这是最常见的坑!很多时候Node.js默认会监听127.0.0.1(仅本地回环),就算端口在防火墙开了,外部也根本连不上。你可以在VM里执行命令:

    netstat -tulpn | grep 8080
    # 或者用ss命令(如果netstat没装)
    ss -tulpn | grep 8080
    

    看输出里的LISTEN地址,如果是127.0.0.1:8080,那必须修改你的Node.js代码,把监听地址改成0.0.0.0(允许所有IP访问),比如:

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

    重启应用后再试。

  • 验证GCP防火墙规则的有效性
    就算你在控制台加了规则,也可能有细节没注意到:

    • 检查规则的目标标签:你的VM实例必须带有规则里指定的标签,否则规则不会应用到这个VM。比如规则里的targetTags是node-app,那VM的标签也要加上node-app。
    • 确认规则的方向是入站(Ingress),协议是TCP,端口范围包含8080,源IP范围是不是你当前的公网IP(或者0.0.0.0/0如果要开放给所有人)。
    • 可以用gcloud命令快速验证:
      gcloud compute firewall-rules list --filter="ALLOW=tcp:8080"
      
      看输出里的ENABLED列是不是True,TARGET_TAGS和你的VM标签是否匹配。
  • 检查本地网络栈的其他拦截
    虽然你关闭了ufw,但Ubuntu 16.04可能还有iptables的默认规则在生效?你可以执行:

    iptables -L -n | grep 8080
    

    如果有REJECT或者DROP的规则,那需要清理掉。另外,也可以在VM内部用curl访问自己的公网IP:8080,比如:

    curl http://[你的公网IP]:8080
    

    如果内部都访问不了,那大概率是应用监听的问题或者本地防火墙;如果内部能访问但外部不行,那肯定是GCP防火墙的问题。

  • 确认VM的公网IP状态
    虽然你说80、443能访问,但还是确认下你的公网IP是不是静态的?如果是临时IP,重启VM后可能会变,但这种情况概率很低,不过可以快速排除。

一般来说,前两个点就能解决90%的问题,先从监听地址查起,这个最容易忽略!

内容的提问来源于stack exchange,提问作者Awasthî Shußham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:13:20