登录
首页 >  文章 >  php教程

502错误怎么解决?宝塔PHP-FPM服务检查方法

时间:2026-03-28 20:18:42 466浏览 收藏

当网站突然报出“502 Bad Gateway”错误,而宝塔面板却显示站点“运行中”时,问题往往藏在幕后——PHP-FPM服务已悄然宕机或响应异常。本文直击这一高频故障,提供一套清晰、可落地的五步排查与自愈方案:从快速验证服务状态和监听配置一致性,到强制重启与Nginx重载;再进阶启用PHP-FPM状态页实现主动监控,最后通过守护脚本+定时任务构建全自动恢复防线,真正让服务器在PHP崩溃的瞬间秒级自救——无论你是运维新手还是资深站长,都能即学即用,彻底告别反复手动救火的焦虑。

网站出现502 Bad Gateway?在宝塔面板中检查PHP-FPM服务是否宕机

如果您访问网站时返回“502 Bad Gateway”错误,且宝塔面板中站点状态显示为“运行中”,则极可能是PHP-FPM服务已宕机或未正常响应。以下是定位与恢复PHP-FPM服务的实操步骤:

一、检查PHP-FPM服务当前运行状态

通过系统命令直接验证PHP-FPM主进程是否存在及退出原因,这是判断服务是否宕机的第一手依据。若进程不存在或处于failed状态,说明服务未启动或异常终止。

1、登录服务器SSH终端,执行命令查看指定版本PHP-FPM状态(将“74”替换为您实际使用的PHP版本号,如80、82等):
systemctl status php-fpm-74

2、观察输出中的“Active:”字段:
若显示active (running),继续检查监听配置;
若显示inactive (dead)failed to start,立即进入故障修复流程。

3、若状态异常,追加查看最近日志:
journalctl -u php-fpm-74 -n 50 --no-pager

二、验证PHP-FPM监听地址与Nginx配置一致性

Nginx需将请求准确转发至PHP-FPM监听的地址(IP:端口或Unix socket),二者不匹配将直接导致502。常见错误是升级PHP后www.conf中listen路径未同步更新。

1、打开PHP-FPM配置文件:
vi /www/server/php/74/etc/php-fpm.d/www.conf

2、查找listen指令行,确认其值为:
listen = 127.0.0.1:9000(对应TCP模式)

listen = /tmp/php-cgi-74.sock(对应Socket模式)

3、进入宝塔面板 → 网站 → 对应站点 → 设置 → 配置文件,搜索fastcgi_pass指令:
若PHP-FPM使用TCP,则Nginx中必须为fastcgi_pass 127.0.0.1:9000;
若PHP-FPM使用Socket,则必须为fastcgi_pass unix:/tmp/php-cgi-74.sock;

三、强制重启PHP-FPM服务并重载Nginx

在确认配置无误后,需彻底重启PHP-FPM以清除可能存在的僵死进程,并强制Nginx加载最新fastcgi_pass指向,避免缓存旧连接。

1、停止当前PHP-FPM实例:
/etc/init.d/php-fpm-74 stop

2、启动PHP-FPM服务:
/etc/init.d/php-fpm-74 start

3、验证PHP-FPM是否成功运行:
pgrep -x php-fpm | wc -l(返回大于0的数字即为正常)

4、检测Nginx配置语法:
nginx -t

5、重载Nginx使配置生效:
systemctl reload nginx

四、启用PHP-FPM状态页进行实时健康监测

开启FPM状态页可实时查看活跃进程数、等待队列长度、慢请求计数等关键指标,便于快速识别资源耗尽或进程阻塞类宕机诱因。

1、编辑PHP-FPM全局配置:
vi /www/server/php/74/etc/php-fpm.conf

2、取消注释并确认存在以下行:
pm.status_path = /phpfpm_status

3、在Nginx站点配置中添加location块(确保server_name包含127.0.0.1或localhost):
location /phpfpm_status {
  include fastcgi_params;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}

4、重载Nginx后,执行:
curl http://127.0.0.1/phpfpm_status?json

五、部署自动守护脚本防止服务静默宕机

当PHP-FPM因内存溢出、子进程崩溃等原因意外退出时,手动干预存在时效盲区。通过Linux定时任务+守护脚本可实现秒级自愈,无需人工介入。

1、创建守护脚本文件:
vi /www/shell/check_php.sh

2、写入以下内容(请将“74”替换为您的PHP版本):
#!/bin/bash
if ! pgrep -x php-fpm-74 > /dev/null; then
  /etc/init.d/php-fpm-74 start
fi

3、赋予执行权限:
chmod +x /www/shell/check_php.sh

4、进入宝塔面板 → 计划任务 → 添加任务:
任务类型:Shell脚本
执行周期:每分钟
脚本内容:
/www/shell/check_php.sh

今天关于《502错误怎么解决?宝塔PHP-FPM服务检查方法》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>