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

Nginx/Node/MongoDB站点502 Bad Gateway(111:Unknown error)排查

故障根因分析

从错误日志和现象判断,核心故障是Nginx无法和本地127.0.0.1:5005的Node服务建立TCP连接,两个访问异常分别对应:

  • HTTPS访问返回502 Bad Gateway:Nginx反向代理请求转发阶段触发连接拒绝,错误码111是Linux内核返回的连接被拒响应,不是Nginx本身配置语法错误。
  • HTTP访问返回404 Not Found:当前80端口的请求没有匹配到正确的站点虚拟主机(vhost)规则,落到Nginx默认vhost上返回默认404页,属于次要配置问题。
  • 公网检测5005端口关闭属于正常状态:Node服务作为上游应用不需要暴露公网,EC2安全组仅放通80、443端口是合理的安全配置,这个点不需要调整。

结合“此前运行正常、约一个月前突发异常”的时间线,故障触发概率从高到低排序如下:

  1. SELinux安全策略拦截:AWS Amazon Linux 2默认开启SELinux,系统自动更新后默认策略会禁止Nginx(属于httpd安全上下文)连接本地非标准Web端口,是这类突发故障的最高发原因。
  2. Node服务仅监听IPv6回环地址:Node启动时如果绑定localhost,部分系统会优先解析到IPv6地址::1,此时服务只监听IPv6回环,Nginx请求IPv4的127.0.0.1:5005会被直接拒绝,而本地curl测试时会自动适配IPv6/IPv4所以表现为访问正常。
  3. 站点vhost配置冲突:Certbot自动生成SSL配置时可能出现规则优先级问题,导致80端口请求匹配到默认vhost、443端口的上游转发规则失效。
分步修复方案

按以下顺序操作,每步完成后测试访问状态,定位到问题后不需要继续后续步骤:

  1. 验证SELinux拦截问题
    执行以下命令临时关闭SELinux测试:

    sudo setenforce 0
    

    刷新浏览器访问HTTPS站点,如果恢复正常,即可确认是SELinux拦截。不要长期关闭SELinux,执行以下命令永久放通Nginx的网络连接权限:

    sudo setsebool -P httpd_can_network_connect 1
    sudo setenforce 1
    

    执行完成后再次测试访问即可。

  2. 确认Node服务监听地址
    如果关闭SELinux后故障依旧,执行以下命令查看5005端口的实际监听状态:

    ss -tulpn | grep 5005
    
    • 如果输出的本地地址列显示为::1:5005,说明服务仅绑定了IPv6回环。修改Node服务启动代码,将listen参数明确指定为绑定IPv4回环:
      // 原代码如果是app.listen(5005) 或者 app.listen(5005, 'localhost')
      app.listen(5005, '127.0.0.1')
      
      重启Node服务后再测试。
    • 如果输出显示为127.0.0.1:5005,进入下一步排查。
  3. 修正Nginx虚拟主机配置
    你贴出的是Nginx主配置,所有站点规则存放在/etc/nginx/sites-enabled/目录下,执行以下操作:

    • 先删除默认vhost配置避免冲突:sudo rm -f /etc/nginx/sites-enabled/default
    • 编辑对应alltimeschool.com的站点配置,确保80端口的server块添加强制HTTPS跳转规则:
      server {
          listen 80;
          server_name alltimeschool.com www.alltimeschool.com;
          return 301 https://$host$request_uri;
      }
      
    • 确认443端口的server块中反向代理配置正确:
      location / {
          proxy_pass http://127.0.0.1:5005;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
      }
      

    配置修改完成后执行以下命令检查语法并重载Nginx:

    sudo nginx -t
    sudo systemctl reload nginx
    
  4. 极端场景排查
    如果以上操作都无效,执行sudo iptables -L -n -v检查本地防火墙规则,确认lo回环网卡的流量没有被DROP规则拦截,正常情况下回环网卡的所有流量应该默认放通。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:09:14