调试 Ubuntu 下的 PHP-FPM 通常从「日志 → 配置 → 进程 → 端口/套接字 → 权限」这几个层面入手。下面给你一套常用且实用的调试流程,从基础到进阶。
systemctl status php-fpm
# 或(Ubuntu 常见)
systemctl status php8.1-fpm
✅ 正常状态应为 active (running)
❌ 如果是 failed,直接看日志:
journalctl -u php8.1-fpm -xe
/var/log/php8.1-fpm.log
查看最近错误:
tail -n 100 /var/log/php8.1-fpm.log
常见错误:
pool www does not existfailed to listen on socketpermission denied/etc/php/8.1/fpm/php-fpm.conf
/etc/php/8.1/fpm/pool.d/www.conf
重点检查:
listen = /run/php/php8.1-fpm.sock
; 或
listen = 127.0.0.1:9000
⚠️ Nginx / Apache 必须一致
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
如果你用 Nginx:
ps aux | grep nginx
确认 Nginx 用户是 www-data
ls -l /run/php/php8.1-fpm.sock
ss -lntp | grep 9000
php -v
sudo -u www-data php /var/www/html/test.php
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
| 错误 | 原因 |
|---|---|
| 502 Bad Gateway | socket 不存在 / 权限不对 |
| 504 Gateway Timeout | FPM 进程卡死 |
| File not found | SCRIPT_FILENAME 错误 |
/etc/php/8.1/fpm/php.ini
display_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_errors.log
然后重启:
systemctl restart php8.1-fpm
systemctl restart php8.1-fpm
# 或
systemctl reload php8.1-fpm
✅ PHP-FPM 是否在运行
✅ 日志有没有报错
✅ socket / 端口是否匹配
✅ 权限是否正确
✅ Nginx 配置是否正确
✅ SCRIPT_FILENAME 是否对
你可以直接贴出:
www.conf 的 listen 部分我可以一步一步帮你定位 ✅