EC2实例Nginx服务本地可访问 公网IP无法访问问题咨询
EC2实例Nginx公网无法访问排查方案
本地执行curl localhost/curl 127.0.0.1能正常返回Nginx默认页,已经证明Nginx服务本身运行完全正常,反复重装Nginx解决不了问题,故障点全在流量拦截链路,按优先级从高到低排查即可:
- 第一优先级:检查EC2安全组入站规则
90%的同类问题都是安全组未放行Web端口导致。进入AWS控制台对应EC2实例详情页,找到实例绑定的安全组,检查入站规则:- 必须放通TCP协议80端口的入站流量,测试阶段源地址可暂时设为
0.0.0.0/0允许所有公网IP访问,后续按需收紧为指定IP段 - 如果配置了HTTPS访问,同步放通TCP 443端口
- 不要只检查出站规则,公网用户访问你的服务走的是入站流量,默认新建的安全组通常只开放22端口用于SSH登录,不会自动开80/443
- 必须放通TCP协议80端口的入站流量,测试阶段源地址可暂时设为
- 第二优先级:检查Ubuntu本地ufw防火墙规则
安全组放通后如果还是不通,排查系统自带防火墙拦截:- 执行
sudo ufw status查看防火墙状态,如果返回Status: inactive说明防火墙没开,直接跳过这步 - 如果返回
Status: active,执行以下命令放行Nginx流量并重载规则:sudo ufw allow 'Nginx Full' sudo ufw reload - 重新执行
sudo ufw status,确认返回结果里有80/tcp、443/tcp的ALLOW规则即可
- 执行
- 第三优先级:检查VPC网络ACL规则
前两步都配置完仍不通的话,检查实例所在子网绑定的网络ACL:
网络ACL是无状态规则,和安全组的有状态逻辑不同,入站放通80端口的同时,必须同步放通目的端口为1024-65535的TCP入站回包流量,同时对应出站规则也要放通对应端口段,否则三次握手无法完成。 - 第四优先级:确认Nginx监听地址配置
最后确认Nginx没有只绑定回环地址:
执行sudo ss -tulpn | grep nginx查看监听结果,正常应该显示Nginx监听0.0.0.0:80或者:::80(即监听所有网卡地址)。如果结果只显示127.0.0.1:80,修改Nginx站点配置文件里的listen参数,改为listen 80;(默认配置就是监听所有地址,非手动改坏基本不会出这个问题),改完执行sudo nginx -s reload重载配置即可。
附本地回环验证正常的回显参考:
<html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
内容的提问来源于stack exchange,提问作者Md Misbauddin Chowdhury
相关产品推荐
相关产品推荐

