跳转到主内容
极星编程网:以代码为星,赴技术山海!

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

502错误通常因PHP-FPM服务宕机或配置不匹配导致,需依次检查服务状态、监听配置一致性、进程与权限、直连响应及状态页指标。 如果访问网站时返回502 Bad Gateway错误,通常表明Nginx已接收到请求,但无法成功将请求转发给PHP-FPM处理。以下是排查PHP-FPM服务是否宕机的具体操作步骤: 一、检查PHP-FPM服务运行状态 该步骤用于确认PHP-FPM主进程是否处于活动状态。若服务未启动或异常退出,Nginx将因无法连接FastCGI后端而返回502错误。 1、通过SSH登录服务器,执行命令查看当前PHP版本对应的服务状态: systemctl statusphp-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进程。 PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 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 {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
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
等字段数值是否异常。

相关文章