php-fpm监听路径配置错误会导致502错误,核心是listen与fastcgi_pass不一致或socket权限问题;需检查php-fpm.conf及www.conf中listen值,同步nginx的fastcgi_pass,设置正确owner/group/mode,并确保/run/php/目录权限合理。

PHP-FPM 监听路径配置错误,会导致 Nginx(或其他 Web 服务器)无法与 PHP-FPM 正确通信,表现为 502 Bad Gateway、connect() to unix:/var/run/php/php8.1-fpm.sock failed 等错误。核心问题通常出在 listen 指令与 Nginx 的 fastcgi_pass 不一致,或 socket 文件权限/路径不可达。
确认 PHP-FPM 实际监听地址
先查 PHP-FPM 当前生效的监听配置:
- 运行
sudo php-fpm8.1 -t(版本号按实际调整)验证配置语法 - 查看主配置文件位置:
php --ini或php-fpm8.1 -i | grep "Loaded Configuration File" - 打开主配置(如
/etc/php/8.1/fpm/php-fpm.conf),检查include行,定位到 pool 配置(通常是/etc/php/8.1/fpm/pool.d/www.conf) - 在
www.conf中找到listen =行,常见值为:
•listen = /run/php/php8.1-fpm.sock(Unix socket,推荐)
•listen = 127.0.0.1:9000(TCP 端口)
同步 Nginx fastcgi_pass 配置
Nginx 的 location ~ \.php$ 块中,fastcgi_pass 必须与 PHP-FPM 的 listen 完全匹配:
- 若 PHP-FPM 使用 socket:
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
注意路径需与www.conf中listen一致(包括符号链接是否真实存在) - 若 PHP-FPM 使用 TCP:
fastcgi_pass 127.0.0.1:9000; - 检查 Nginx 配置语法:
sudo nginx -t,再重载:sudo systemctl reload nginx
修复 socket 权限与归属问题
Unix socket 文件需满足:Nginx 工作进程用户(如 www-data)有读写权限,且 PHP-FPM 进程能创建并持有该文件:
- 在
www.conf中设置:listen = /run/php/php8.1-fpm.socklisten.owner = www-datalisten.group = www-datalisten.mode = 0660 - 确保
/run/php/目录存在且可写:sudo mkdir -p /run/phpsudo chown root:www-data /run/phpsudo chmod 0755 /run/php - 重启服务:
sudo systemctl restart php8.1-fpm && sudo systemctl restart nginx
完整可运行的 www.conf 片段(socket 方式)
以下为修正后的关键配置节(保存为 /etc/php/8.1/fpm/pool.d/www.conf):
[www] user = www-data group = www-data listen = /run/php/php8.1-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0660 pm = dynamic pm.max_children = 10 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 6 chdir = /
搭配 Nginx server 块中的标准 PHP 处理段:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











