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

Azure上Express与PM2部署问题:端口80无法访问

排查与解决Azure Ubuntu VM上Express应用80端口无法访问的问题

我之前在Azure虚拟机上部署Node.js应用时也碰到过类似的情况,咱们一步步来定位问题:

1. 先确认服务是否真的在监听正确的IP和端口

有时候pm2显示启动成功,但应用可能只绑定了本地回环地址(127.0.0.1),导致外网无法访问。执行以下命令检查监听状态:

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

如果输出里只看到127.0.0.1:80,说明你的Express应用只绑定了本地地址,需要修改listen代码,明确绑定到所有网卡:

http.createServer(app).listen(80, '0.0.0.0', function(){ 
  console.log('App running on port 80'); 
});

修改后重启pm2:pm2 restart index.js,再重新检查监听状态。

2. 仔细核对Azure网络安全组(NSG)规则

Azure的NSG规则很容易踩坑,哪怕你觉得配置对了,也要再确认这几个细节:

  • 规则是入站方向,不是出站
  • 端口范围精确到80,协议选择TCP
  • 源地址如果是测试阶段,可以暂时设为Any(后续再限制),不要误设成特定IP导致自己无法访问
  • 确认这个NSG是绑定在你的虚拟机对应的网络接口上,而不是其他无关的NSG

如果不确定,可以临时创建一条优先级更高的入站规则允许所有TCP流量(仅测试用),如果能访问了,说明之前的NSG规则有问题,再修复后删除这条测试规则。

3. 验证ufw防火墙规则是否生效

执行命令查看ufw的详细状态:

sudo ufw status verbose

确认输出里有80/tcp ALLOW IN Anywhere(以及对应的IPv6规则,如果你的VM启用了IPv6)。如果没有这条规则,重新添加并重载:

sudo ufw allow 80/tcp
sudo ufw reload

4. 检查pm2的运行细节与日志

虽然你说启动无报错,但某些权限问题可能隐藏在日志里:

  • 先看pm2的应用状态:pm2 status,确保应用是online状态
  • 查看详细日志:pm2 logs index.js,如果看到EACCES: permission denied相关的报错,大概率是setcap命令的路径不对——你给/usr/bin/node加了权限,但pm2可能用的是另一个node路径(比如/usr/local/bin/node)。执行which node查看pm2实际使用的node路径,然后给这个路径重新加cap:
sudo setcap 'cap_net_bind_service=+ep' $(which node)

之后重启pm2:pm2 restart index.js

5. 排查DNS解析问题

你用域名parse.sensa-platform.com访问,先确认这个域名解析的是你的虚拟机公网IP:

nslookup parse.sensa-platform.com

如果返回的IP不是你的VM公网IP,那问题出在DNS记录配置上,需要修改域名的A记录指向正确的IP。

6. 用公网IP直接测试排除域名问题

暂时跳过域名,直接用VM的公网IP访问:

curl -I http://<你的VM公网IP>/public/test.txt

如果能访问,说明是域名解析的问题;如果还是不行,回到前面的步骤重新排查。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:09:46