在 Ubuntu 上 PHP-FPM 报 502 Bad Gateway,通常是 Nginx / Apache 无法正确连接到 PHP-FPM 导致的。下面按「最常见原因 → 排查方法」给你一个系统性的说明。
systemctl status php-fpm
# 或(Ubuntu 常见)
systemctl status php8.1-fpm
✅ 解决:
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm
Nginx 中常见两种连接方式:
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
确认文件存在:
ls -l /run/php/php8.1-fpm.sock
不存在说明 PHP-FPM 没起来或 pool 配置错误。
fastcgi_pass 127.0.0.1:9000;
确认端口监听:
netstat -lntp | grep 9000
Nginx 用户(通常是 www-data)无法访问 sock 文件。
查看:
ps aux | grep nginx
ps aux | grep php-fpm
PHP-FPM pool 配置:
/etc/php/8.1/fpm/pool.d/www.conf
确保:
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
修改后:
sudo systemctl restart php8.1-fpm
PHP 报错或被 kill 也会 502。
查看日志:
tail -f /var/log/php8.1-fpm.log
tail -f /var/log/nginx/error.log
常见原因:
Nginx 必须包含:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
sudo nginx -t
sudo systemctl restart nginx
# 1. PHP-FPM 是否运行
systemctl status php8.1-fpm
# 2. sock 是否存在
ls /run/php/
# 3. Nginx 错误日志
tail -n 50 /var/log/nginx/error.log
# 4. PHP-FPM 日志
tail -n 50 /var/log/php8.1-fpm.log
# 5. Nginx 配置测试
nginx -t
connect() to unix:/run/php/php8.1-fpm.sock failed→ sock 不存在 / 权限不对
upstream prematurely closed connection→ PHP 崩溃或超时
permission denied→ 用户 / 权限问题
如果你愿意,可以把 Nginx 配置 + PHP-FPM 日志贴出来,我可以直接帮你定位是哪一条原因。