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
相关产品推荐
相关产品推荐

