PHP怎样让PHP-FPM用UNIX套接字_PHP-FPM用UNIX套接字配置【通信】

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怎样让php-fpm用unix套接字_php-fpm用unix套接字配置【通信】

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.ownerlisten.grouplisten.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 表示仅属主和属组可读写,避免其他用户访问。

来福FM

来福FM

来福 – 你的私人AI电台

下载

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)。

https://www.php.cn/faq/1994816.html

发表回复

Your email address will not be published. Required fields are marked *