502错误通常因PHP-FPM服务宕机或配置不匹配导致,需依次检查服务状态、监听配置一致性、进程与权限、直连响应及状态页指标。

如果访问网站时返回502 Bad Gateway错误,通常表明Nginx已接收到请求,但无法成功将请求转发给PHP-FPM处理。以下是排查PHP-FPM服务是否宕机的具体操作步骤:
一、检查PHP-FPM服务运行状态
该步骤用于确认PHP-FPM主进程是否处于活动状态。若服务未启动或异常退出,Nginx将因无法连接FastCGI后端而返回502错误。
1、通过SSH登录服务器,执行命令查看当前PHP版本对应的服务状态:systemctl status php-fpm-74(若使用PHP 8.0则替换为php-fpm-80,依此类推)。
2、观察输出中是否包含active (running)字样;若显示inactive (dead)或failed to start,说明服务未运行。
立即学习“PHP免费学习笔记(深入)”;
3、若服务未运行,尝试手动启动:systemctl start php-fpm-74,再执行systemctl status php-fpm-74验证结果。
二、验证PHP-FPM监听配置与Nginx一致性
该步骤用于排除因监听地址或端口不匹配导致的通信失败。Nginx的fastcgi_pass必须与PHP-FPM的listen参数完全一致,否则请求无法送达。
1、打开PHP-FPM配置文件:/www/server/php/74/etc/php-fpm.d/www.conf(路径中的74需按实际PHP版本调整)。
2、查找listen =行,确认其值为127.0.0.1:9000或/tmp/php-cgi-74.sock等具体地址。
3、进入宝塔面板 → 网站 → 对应站点 → 设置 → 配置文件,搜索fastcgi_pass,确保其值与上一步获取的listen值严格一致。
4、修改后执行nginx -t校验语法,再运行systemctl reload nginx重载配置。
三、检查PHP-FPM进程是否存在及权限状态
该步骤用于识别进程被意外终止、权限不足或SELinux/firewalld干扰等底层问题。即使服务显示“active”,也可能因子进程崩溃或socket不可达而失效。
1、执行命令列出所有PHP-FPM进程:ps aux | grep php-fpm,确认存在master进程和若干worker进程。
2、若仅剩master进程且无worker,或完全无输出,说明FPM未能正常派生子进程。
3、检查socket文件或端口权限:若使用Unix socket(如/tmp/php-cgi-74.sock),运行ls -l /tmp/php-cgi-74.sock,确认属主为nobody或www,且Nginx工作进程用户有读写权限。
4、若使用TCP端口(如127.0.0.1:9000),执行netstat -tlnp | grep :9000,确认PHP-FPM正在监听且无其他程序占用该端口。
四、利用curl直接测试PHP-FPM响应能力
该步骤绕过Nginx,直接向PHP-FPM发送HTTP头请求,可精准判断是Nginx层故障还是PHP-FPM自身无响应。
1、在服务器本地执行:curl -I http://localhost,若返回HTTP/1.1 200 OK或类似成功响应,说明PHP-FPM正常工作;若超时或返回空,表明PHP-FPM未响应。
2、若使用socket方式,可改用curl --unix-socket /tmp/php-cgi-74.sock http://localhost(需curl 7.40+支持)。
3、若上述任一测试失败,立即检查/www/server/php/74/var/log/php-fpm.log末尾日志,定位ERROR或WARNING记录。
五、启用并访问PHP-FPM状态页进行深度诊断
该步骤借助PHP-FPM内置的状态监控接口,实时获取进程池健康度、队列积压、慢请求等关键指标,辅助识别隐性资源瓶颈。
1、编辑/www/server/php/74/etc/php-fpm.conf,取消注释或添加:pm.status_path = /phpfpm_status。
2、在Nginx站点配置中添加location块(位于server段内):
location /phpfpm_status {<br> include fastcgi_params;<br> fastcgi_pass 127.0.0.1:9000;<br> fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;<br>}
3、执行nginx -t && systemctl reload nginx && systemctl reload php-fpm-74使配置生效。
4、在服务器本地执行:curl http://127.0.0.1/phpfpm_status?json,检查返回中active processes、listen queue、max children reached等字段数值是否异常。











