
本文详解 Ubuntu 20.04 下因 PHP-FPM 套接字路径配置不一致(如 php7.4-fpm.sock 未创建或 Nginx 指向错误版本)引发的服务启动失败与 502 Bad Gateway 问题,并提供完整排查与修复流程。
本文详解 ubuntu 20.04 下因 php-fpm 套接字路径配置不一致(如 `php7.4-fpm.sock` 未创建或 nginx 指向错误版本)引发的服务启动失败与 502 bad gateway 问题,并提供完整排查与修复流程。
在 Ubuntu 20.04 环境中,PHP-FPM 启动失败并报错 ERROR: unable to bind listening socket for address '/var/run/php-fpm/php7.4-fpm.sock': No such file or directory,通常并非套接字文件“真的丢失”,而是PHP-FPM 实际监听路径与 Nginx 配置中 fastcgi_pass 指向的路径不一致,或 PHP-FPM 进程根本未成功启动(常因配置冲突、权限不足或路径不存在导致)。
首先需明确:Ubuntu 系统中 PHP-FPM 的 Unix 套接字默认路径为 /run/php/(而非 /var/run/php-fpm/),且路径命名严格对应已安装的 PHP 版本。例如:
- PHP 7.4 对应套接字:
/run/php/php7.4-fpm.sock - PHP 8.1 对应套接字:
/run/php/php8.1-fpm.sock
而你的 www.conf 中配置了:
listen = /var/run/php-fpm/php7.4-fpm.sock
该路径既非 Ubuntu 默认位置(/run/php/),又缺少父目录 /var/run/php-fpm/ —— 该目录通常不会被自动创建,导致 PHP-FPM 启动时无法创建套接字文件,进而触发 No such file or directory 错误。
立即学习“PHP免费学习笔记(深入)”;
✅ 推荐解决方案:统一使用 Ubuntu 标准路径 /run/php/
-
修正 PHP-FPM 配置
编辑池配置文件:sudo nano /etc/php/7.4/fpm/pool.d/www.conf
将
listen行修改为(注意路径与权限):listen = /run/php/php7.4-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0660
⚠️ 注意:
/run/php/是tmpfs挂载点,由系统在启动时自动创建,无需手动建目录;若仍提示路径不可写,请确认www-data用户对该路径有访问权限(通常默认满足)。 -
重启 PHP-FPM 服务
sudo systemctl daemon-reload sudo systemctl restart php7.4-fpm sudo systemctl status php7.4-fpm # 验证是否 Active (running)
此时应能在
/run/php/下看到套接字文件:ls -l /run/php/php7.4-fpm.sock
-
同步更新 Nginx 配置
编辑站点配置(如/etc/nginx/sites-available/default),确保fastcgi_pass与 PHP-FPM 实际监听路径完全一致:location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.4-fpm.sock; # ✅ 严格匹配 PHP 版本与路径 # fastcgi_pass 127.0.0.1:9000; # 备用 TCP 方式(需在 www.conf 中启用 listen = 127.0.0.1:9000) }? 特别提醒:你原配置中
fastcgi_pass unix:/run/php/php8.1-fpm.sock指向的是 PHP 8.1,但 PHP 7.4 服务并未监听该路径——这正是 502 Bad Gateway 的直接原因。务必保证 Nginx 与 PHP-FPM 版本及套接字路径一对一匹配。 -
验证并重载 Nginx
sudo nginx -t # 检查语法 sudo systemctl reload nginx
? 额外检查项
- 若仍失败,确认 SELinux(Ubuntu 默认禁用)或 AppArmor 未拦截(可临时禁用测试);
- 查看日志定位深层问题:
sudo journalctl -u php7.4-fpm -n 50 -f; - 避免混用
/var/run/和/run/:二者在 Ubuntu 中是符号链接(/var/run → /run),但/var/run/php-fpm/子目录需手动创建且非标准,易引发权限混乱。
总结:核心在于路径标准化 + 版本一致性。坚持使用 /run/php/phpX.Y-fpm.sock 路径,严格对齐 PHP-FPM 配置与 Nginx fastcgi_pass,即可彻底解决套接字缺失假象与 502 错误。



















