PHP-FPM 使用 UNIX 套接字通信更快更安全,需确保 listen 路径与 Nginx 的 fastcgi_pass 严格一致、权限设为 0666 并指定 owner/group 为 www-data,最后重启服务并验证 sock 文件存在且可访问。

PHP-FPM 使用 UNIX 套接字(sock)通信比 TCP/IP 更快、更安全,但路径配置必须精确且权限匹配,否则 Nginx 会报 connect() to unix:... failed (13: Permission denied) 或 no such file or directory。
确认 PHP-FPM 的 sock 监听路径
打开 PHP-FPM 的 Pool 配置文件(通常是 /etc/php/8.2/fpm/pool.d/www.conf,版本号依实际调整),找到并修改以下行:
-
listen = /run/php/php8.2-fpm.sock(推荐标准路径,Ubuntu/Debian 默认用此) - 或
listen = /tmp/php-fpm.sock(临时目录,重启可能丢失,不推荐生产环境) - 或
listen = /dev/shm/php-fpm.sock(内存文件系统,性能略优,需确保/dev/shm可写)
⚠️ 注意:不能用相对路径、不能带符号链接;路径大小写和斜杠结尾必须与 Nginx 配置完全一致。
Nginx 中正确引用该 sock 路径
在 Nginx 站点配置的 location ~ \.php$ 块中,fastcgi_pass 必须写成:
-
fastcgi_pass unix:/run/php/php8.2-fpm.sock;(路径前加unix:,结尾分号不可少) - 绝对路径必须与 PHP-FPM 的
listen值一字不差
配完务必执行:sudo nginx -t && sudo systemctl reload nginx
设置 sock 文件权限,避免 13: Permission denied
PHP-FPM 默认创建的 sock 文件权限是 0660,仅限 owner/group 访问。若 Nginx 运行用户(如 www-data)不在 PHP-FPM 的 group 中,就会拒绝连接。
解决方法:在同一个 Pool 配置文件(如 www.conf)中,取消注释并设为:
listen.owner = www-datalisten.group = www-data-
listen.mode = 0666(开放读写,Nginx 和 PHP-FPM 用户均可访问)
改完重启 PHP-FPM:sudo systemctl restart php8.2-fpm(服务名按实际版本调整)
验证 sock 文件是否生成并可访问
执行以下命令检查:
-
ls -l /run/php/php8.2-fpm.sock—— 确认文件存在、权限为srw-rw-rw-(开头s表示 socket) -
ps aux | grep "php-fpm" | grep -v grep—— 确认 master 进程在运行 -
sudo -u www-data curl --unix-socket /run/php/php8.2-fpm.sock http://localhost/(仅用于调试,非标准用法)
如果仍不通,再检查 PHP-FPM 和 Nginx 是否使用同一用户组(常见于自编译安装场景)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











