Azure Linux虚拟机入站规则配置失败,无法接收流量
排查Azure Linux虚拟机上Apache Web服务器无法访问的问题
我来帮你一步步排查这个问题,结合你提供的NSG入站规则截图,咱们从几个关键方向入手:
先确认Apache服务本身是否正常运行
登录到你的Linux虚拟机,先检查Apache的状态:- 如果你用的是Debian/Ubuntu系列,执行:
systemctl status apache2 - 如果是RHEL/CentOS系列,执行:
systemctl status httpd
看输出里是否显示active (running)。如果服务没启动,先启动它:systemctl start apache2(或httpd),再设置开机自启:systemctl enable apache2。
接着在VM本地测试访问,执行curl localhost,如果能返回Apache的默认页面内容,说明服务本身没问题;如果本地都访问不了,那大概率是Apache的配置文件有误,比如端口冲突、配置语法错误。
- 如果你用的是Debian/Ubuntu系列,执行:
检查虚拟机的本地防火墙
很多Linux发行版默认启用了本地防火墙,这可能会拦截外部请求:- Ubuntu系统:执行
ufw status查看当前规则,如果没看到允许80/443端口的规则,添加:ufw allow 80/tcp ufw allow 443/tcp ufw reload - CentOS/RHEL系统:执行
firewall-cmd --list-all查看已开放的服务,如果没有http和https,添加:firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --reload
- Ubuntu系统:执行
核实Azure网络安全组(NSG)的配置细节
从你的截图看,已经添加了80和443的入站允许规则,但还有几个细节要确认:- 这些规则是否关联到了你的VM对应的网络接口或子网?有时候NSG可能被创建但没正确关联到目标资源,导致规则不生效。
- 检查规则的优先级:有没有优先级更高的拒绝规则(比如拒绝所有入站的规则)覆盖了你的允许规则?NSG规则是按优先级从低到高数值执行的,数值越小优先级越高。
- 确认规则的目标端口范围和协议是不是准确设置为
80/443、TCP,来源是否为Any(或者你指定的正确来源范围)。
验证公网IP和端口连通性
- 确保你访问的是VM的公网IP地址,而不是内网IP。你可以在Azure门户的VM详情页查看公网IP,或者登录VM执行
curl ifconfig.me获取当前公网IP,用这个IP测试访问。 - 用telnet或nc工具测试端口连通性,比如在本地电脑执行
telnet <VM公网IP> 80,如果连接超时,说明网络层面(NSG或路由)有问题;如果提示“连接被拒绝”,则可能是Apache没监听80端口或本地防火墙拦截。
- 确保你访问的是VM的公网IP地址,而不是内网IP。你可以在Azure门户的VM详情页查看公网IP,或者登录VM执行
检查Apache的监听配置
确认Apache是否在正确的端口和地址上监听:- 查看配置文件:Ubuntu的
/etc/apache2/ports.conf,CentOS的/etc/httpd/conf/httpd.conf,确保里面有Listen 80(如果用HTTPS还要有Listen 443)。 - 执行
netstat -tulpn | grep apache2(或httpd),看输出里是否有0.0.0.0:80或者:::80,这表示Apache在所有网络接口上监听;如果只有127.0.0.1:80,说明只允许本地访问,需要修改配置文件后重启Apache。
- 查看配置文件:Ubuntu的
内容的提问来源于stack exchange,提问作者daRula
相关产品推荐
相关产品推荐

