PHP-FPM 改用 UNIX 套接字需修改 pool 配置中 listen 为 /run/php/php8.2-fpm.sock,并设置 listen.owner、listen.group 和 listen.mode;Nginx 的 fastcgi_pass 必须同步改为 unix:/run/php/php8.2-fpm.sock;重启 php8.2-fpm(非 reload),验证 socket 权限与存在性。

PHP-FPM 配置 listen 为 UNIX 套接字路径
默认 PHP-FPM 使用 TCP 端口(如 127.0.0.1:9000),改用 UNIX 套接字能减少网络栈开销、提升本地通信性能,也更安全(权限可控)。关键在于修改 PHP-FPM 的 pool 配置文件(通常是 /etc/php/{version}/fpm/pool.d/www.conf)中的 listen 指令。
把这一行:
listen = 127.0.0.1:9000
替换成类似这样:
listen = /run/php/php8.2-fpm.sock
注意:/run/php/ 是推荐路径(tmpfs,重启自动清理),确保该目录存在且 PHP-FPM 进程用户(通常是 www-data)有读写权限。不要用 /tmp/ 下的路径——部分系统会定期清理,导致 socket 文件消失而服务中断。
立即学习“PHP免费学习笔记(深入)”;
必须同步设置 listen.owner、listen.group 和 listen.mode
UNIX 套接字是文件,权限不对,Web 服务器(如 Nginx)根本连不上,常见报错是 connect() to unix:/run/php/php8.2-fpm.sock failed (13: Permission denied) 或 (2: No such file or directory)(后者常因权限阻止创建 socket 文件)。
在同一个 pool 配置里补全这三行:
listen.owner = www-data listen.group = www-data listen.mode = 0660
其中:www-data 要和 Nginx worker 进程运行的用户一致(可通过 ps aux | grep nginx 查看 USER 列);0660 表示仅属主和属组可读写,避免其他用户访问。
Nginx 中 fastcgi_pass 必须指向同一 socket 路径
PHP-FPM 改了监听方式,Nginx 的 upstream 也得跟着改。原来可能是:
fastcgi_pass 127.0.0.1:9000;
要改成:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
路径必须完全一致(包括大小写、斜杠结尾与否);如果用了相对路径或符号链接,Nginx 不识别,必须用绝对路径;配置后记得 sudo nginx -t 测试语法,再 sudo systemctl reload nginx。
重启顺序和权限验证不能跳过
改完 PHP-FPM 配置后,不能只 reload,必须 systemctl restart php8.2-fpm(版本号按实际替换),因为 socket 文件是在启动时创建的,reload 可能不重建文件或保留旧权限。
验证是否生效:
- 检查 socket 文件是否存在:
ls -l /run/php/php8.2-fpm.sock,确认属主/属组和 mode 符合配置 - 检查 PHP-FPM 是否在监听:
ss -ltpn | grep ':9000\|php.*sock',应看到u_str类型条目 - 查看 PHP-FPM 日志:
journalctl -u php8.2-fpm -n 20 --no-pager,确认无failed to create listening socket类错误
最容易被忽略的是:Nginx 和 PHP-FPM 用户不一致,或者 /run/php/ 目录在重启后未被自动重建(某些旧系统需在 systemd service 中加 RuntimeDirectory=php)。











