我的知识记录

网站API接口502 Bad Gateway_各种场景下的处理_完整排查流程

502 Bad Gateway和504 Gateway Timeout是两种常见的网关错误,容易混淆。502是上游服务器返回了无效响应(如连接被拒绝、连接重置、返回格式错误),504是上游服务器超时未响应。两者的原因和处理方法不同,需要准确区分。本文重点讲解502 Bad Gateway,同时对比504的区别,帮助站长准确判断和处理。

排查502错误的第一步是确认后端服务状态。Nginx+PHP-FPM架构下,最常见的原因是PHP-FPM服务停止或崩溃。检查PHP-FPM状态:systemctl status php-fpm(Linux),查看服务是否运行。如果服务停止,启动PHP-FPM:systemctl start php-fpm。查看PHP-FPM的错误日志,通常在/var/log/php-fpm/或/var/log/phpX.X-fpm.log,日志中会记录崩溃原因。如果PHP-FPM频繁崩溃,可能是内存不足、PHP扩展冲突、程序死循环等原因,需要进一步排查。

第二步是检查服务器资源。CPU、内存、磁盘空间不足都会导致后端服务无法正常响应,出现502。使用top或htop查看CPU使用率,如果CPU持续100%,可能是程序死循环或被攻击。使用free -m查看内存使用,如果内存不足(available接近0),系统可能OOM杀掉PHP-FPM进程,查看dmesg或/var/log/messages中的OOM记录。使用df -h查看磁盘空间,如果磁盘满了,MySQL和PHP-FPM可能无法写入临时文件导致异常。资源不足是502错误的常见原因,尤其是高峰期。

第四步是检查PHP-FPM配置。PHP-FPM的进程数配置不合理会导致502。pm.max_children设置过小,高峰期请求排队超时;设置过大,内存不足导致OOM。根据服务器内存调整max_children,每个PHP-FPM进程约占用50-100MB内存,max_children = 可用内存 / 单进程内存。pm.start_servers、pm.min_spare_servers、pm.max_spare_servers根据max_children比例设置。request_terminate_timeout设置PHP脚本最大执行时间,防止死循环占用进程,建议设置为30-60秒。request_slowlog_timeout记录慢请求,帮助排查性能问题。修改配置后重启PHP-FPM。

解决方案汇总:后端服务停止→启动服务并设置开机自启;资源不足→升级服务器配置或优化程序降低资源占用;PHP-FPM配置不合理→调整进程数和超时时间;Nginx配置错误→修正fastcgi_pass和超时配置;PHP程序致命错误→修复代码bug;MySQL/后端服务异常→修复依赖服务;网络问题→检查服务器间网络连通性;高峰期流量过大→扩容或使用CDN/缓存减轻后端压力。根据排查结果针对性处理,不要盲目重启服务,重启只能临时解决,需要找到根本原因。

运维案例:一个客户的网站持续502,PHP-FPM频繁崩溃,查看日志发现是OOM杀掉了PHP进程。服务器2G内存,max_children设置了50,每个进程占用40MB,总共需要2GB,加上系统和MySQL内存不够。将max_children调整为20,同时增加了1G交换分区,问题解决。内存不足是502的常见原因。

排查提醒:遇到502错误先看Nginx错误日志,日志中会记录具体原因(连接拒绝、无效响应、超时等),根据日志针对性排查,不要盲目重启。检查PHP-FPM状态和服务器资源,这是502最常见的两个原因。修改配置后重启对应服务并测试。

网站API接口502 Bad Gateway_各种场景下的处理_完整排查流程

标签:

更新时间:2026-08-30 15:28:59

上一篇:Apache虚拟主机默认站点屏蔽域名_Apache IIS屏蔽域名访问教程详解

下一篇:域名被墙后百度收录怎么办_快照更新与权重恢复