确认php-fpm运行状态需分步排查:先查systemctl状态,再验配置语法、核对Nginx与php-fpm通信方式(socket/TCP路径及权限)、调整子进程数适配内存、确保www用户权限正确。

查 php-fpm 进程是否真在运行
很多情况下,ps aux | grep php-fpm 看起来有进程,但实际是僵尸进程或已卡死。必须确认主进程(master)是否健康、子进程(workers)是否响应请求。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 执行
systemctl status php74-fpm(注意版本号,如php81-fpm),看状态是否为active (running)且无红色报错 - 用
sudo -u www /www/server/php/74/bin/php-fpm -t检查配置语法——宝塔改过配置后常漏 reload,语法错误会导致启动失败但不报明显异常 - 若显示
failed to open configuration file,说明php-fpm.conf路径被误删或重命名,去/www/server/php/74/etc/下确认文件存在
确认 Nginx 和 php-fpm 的通信方式是否匹配
错误日志里出现 connect() to unix:/tmp/php-cgi-74.sock failed (111: Connection refused) 是典型 mismatch:Nginx 配置里写的是 Unix socket,但 php-fpm 实际监听的是 TCP(比如 127.0.0.1:9000),或者反过来。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 查 Nginx 站点配置中
fastcgi_pass行,例如:fastcgi_pass unix:/tmp/php-cgi-74.sock; - 再查对应 PHP 版本的
php-fpm.conf,确认listen =值是否完全一致(包括路径、权限、是否加listen.owner) - 常见坑:
/tmp/php-cgi-74.sock文件不存在,或属主不是www;此时要手动创建目录并赋权:mkdir -p /tmp && chown www:www /tmp && chmod 1733 /tmp
检查 php-fpm 子进程数与服务器内存是否匹配
轻量服务器(1G 内存)若把 pm.max_children 设成 50,php-fpm 很容易 OOM 被系统 kill,接着就 502。这不是负载高,是配置超限。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 打开
/www/server/php/74/etc/php-fpm.d/www.conf,检查pm = dynamic下的三项:pm.max_children、pm.start_servers、pm.min_spare_servers - 1G 内存机器建议值:
pm.max_children = 10,pm.start_servers = 3,pm.min_spare_servers = 2 - 改完务必执行
systemctl reload php74-fpm(不是 restart),否则配置不生效
别忽略 www 用户权限和 SELinux 干扰
宝塔默认所有 Web 相关服务以 www 用户运行。如果手动上传 DVWA 或修改过根目录权限,www 可能没读取 config.inc.php 或执行 PHP 的权限;SELinux 启用时也会拦截 socket 访问,但宝塔默认关闭 SELinux,所以优先查前者。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 进站点根目录,执行:
chown -R www:www . && find . -type f -exec chmod 644 {} \; && find . -type d -exec chmod 755 {} \; - 检查
/www/server/php/74/etc/php-fpm.d/www.conf中user和group是否都是www,不是nobody或空值 - 若用的是 CentOS 8+/AlmaLinux 等默认启用 SELinux 的系统,临时禁用验证:
setenforce 0;若 502 消失,说明需配策略,而非直接关 SELinux
php-fpm 的 listen 地址表面一致,但 socket 文件权限不对、路径拼写多空格、或 php-fpm 根本没加载该 pool 配置——这些都不会报错,只默默拒绝连接。



















