部署在AWS EC2的NGINX无法路由流量到AWS外部服务器如何排查
问题排查步骤
第一步:验证基础网络连通性
直接登录AWS EC2实例,执行以下命令测试到本地测试服务器的端口连通性:
如果该步骤直接超时,说明问题出在网络层,和NGINX配置无关。telnet XXX.XX.XXX.XXX 3000 # 或者用curl验证服务响应 curl -v http://XXX.XX.XXX.XXX:3000第二步:检查AWS侧出站规则
- 安全组规则:你仅配置了入站端口放行,需确认安全组出站规则是否允许TCP 3000端口到
0.0.0.0/0的访问,默认安全组出站是全放通,若你有自定义修改需补充对应规则。 - VPC NACL规则:确认默认VPC的网络访问控制列表没有限制出站TCP 3000端口,也没有拦截入站的临时响应端口(1024-65535)。
- 若使用Lightsail实例,需单独检查Lightsail控制台的实例防火墙出站规则,确认3000端口已放行。
- 安全组规则:你仅配置了入站端口放行,需确认安全组出站规则是否允许TCP 3000端口到
第三步:检查本地服务商侧入站限制
这是最高概率的问题点:- 本地测试服务器的操作系统防火墙、本地服务商的机房防火墙/WAF/安全组,大概率配置了来源IP白名单,仅允许原本地服务商的NGINX IP访问3000端口,未将AWS EC2的公网IP加入白名单,直接拦截了AWS侧的请求。
- 确认本地Node服务本身没有做访问IP限制,仅允许本地IP段访问3000端口。
第四步:排查NGINX配置问题
你当前的proxy_pass配置写法不规范,多余的引号和break指令可能引发异常,建议修改为标准写法:
修改后执行server { server_name test.mydomain.app www.test.mydomain.app; location / { proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $http_host; proxy_pass http://XXX.XX.XXX.XXX:3000; } }nginx -t验证配置有效性,再执行nginx -s reload重载配置,同时查看NGINX错误日志定位具体报错:tail -f /var/log/nginx/error.log第五步:排查AWS额外安全限制
确认你的AWS账号没有配置WAF、Shield等安全策略拦截出站到非80/443端口的流量,公网子网绑定的互联网网关规则正常,没有路由异常。
内容的提问来源于stack exchange,提问作者callmevari
相关产品推荐
相关产品推荐

