502 Bad Gateway 问题解决指南
出现 502 Bad Gateway 报错时,一般表现为浏览器显示“502 Bad Gateway”或“服务器暂时不可用”,页面内容加载失败,通常在几秒到几分钟内可能自动恢复。这种错误意味着服务器之间的通信出了岔子,但别担心,按下面步骤一步步排查就能找到根子。【可能原因】
[*]后端服务(如 Nginx、Apache)与上游服务器(如应用容器、PHP-FPM、Node.js)连接超时或崩溃。
[*]服务器负载过高,导致资源耗尽(CPU、内存或连接数打满)。
[*]防火墙或**组规则阻止了内部端口通信。
[*]代码或配置错误引发进程崩溃(如 PHP 执行超时、数据库连接池用完)。
[*]反向代理配置错误,比如 proxy_pass 指向了不可用的地址。
【排查步骤】
[*]
检查上游服务是否正常运行
登录服务器,执行 systemctl status your-service 或 ps aux | grep php-fpm,确认应用进程状态。如果有 crash,看日志(如 /var/log/php-fpm/error.log)。
[*]
查看代理服务器错误日志
Nginx 错误日志一般在 /var/log/nginx/error.log,Apache 在 /var/log/httpd/error_log。搜索“upstream timed out”或“connect() failed”等关键词。
[*]
检测服务器资源使用情况
运行 **、free -m、df -h,观察 CPU 和内存是否接近 100%。如果内存吃紧,可能是 PHP 进程泄漏或并发太高。
[*]
测试端口连通性
用 telnet 127.0.0.1 9000(例如 PHP-FPM 端口)检查能否连接。若失败,检查防火墙:iptables -L -n 或 ufw status。
[*]
检查应用超时设置
查看 Nginx proxy_read_timeout、fastcgi_read_timeout 是否过短,以及 PHP max_execution_time 是否够用。超时会引起 502 并丢出对应日志。
【最终解决方案】
[*]服务崩溃:重启服务(systemctl restart nginx && systemctl restart php-fpm),同时修复代码中的死循环或内存泄漏。
[*]负载过高:临时增加服务器实例数或升级配置,同时在应用层加入限流(如 Nginx limit_req)。
[*]防火墙问题:开放对应内部端口,例如 ufw allow 9000 或**组添加入站规则。
[*]配置文件错误:修正 proxy_pass 中的 IP/端口,并检查 upstream 后端是否可用。
[*]超时太短:适当延长 proxy_read_timeout 60s、max_children 等参数,然后平滑重载配置。
搞定这些后,刷新页面应该就能看到正常内容了。如果还不行,仔细看日志中的具体报错行,再去搜索引擎里贴那段错误信息,基本就能药到病除。
页:
[1]