Unix socket替代TCP可减少协议栈开销、提升性能与安全性;需同步修改PHP-FPM的listen路径及权限(listen.owner/group/mode),并严格匹配Nginx中fastcgi_pass的unix:前缀路径,最后重启服务验证socket文件权限与状态。
同一台服务器上运行 Nginx 和 PHP-FPM 时,用 Unix socket 替代 TCP(如 127.0.0.1:9000)能减少网络协议栈开销、避免端口争用、提升响应速度,同时权限更可控、更安全。
编辑对应版本的 pool 配置文件(通常是 /etc/php/*/fpm/pool.d/www.conf),找到 listen 行并替换为 Unix socket 路径:
listen = 127.0.0.1:9000 改为 listen = /run/php/php8.2-fpm.sock(路径建议用 /run/php/,它是 tmpfs,重启自动清理,比 /tmp/ 更可靠)listen.owner = www-data
listen.group = www-data
listen.mode = 0660
/run/php/ 目录存在且属主属组为 www-data,否则 PHP-FPM 启动时无法创建 socket 文件在站点 server 块或 location ~ .php$ 中,把原来的 TCP 地址换成对应的 Unix socket 路径:
fastcgi_pass 127.0.0.1:9000; 改为 fastcgi_pass unix:/run/php/php8.2-fpm.sock;
listen 值完全一致,包括前缀 unix: 和斜杠位置fastcgi_param SCRIPT_FILENAME 等其他参数,它们与通信方式无关配置完成后需完整重启服务,并确认 socket 文件状态:
sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx
ls -l /run/php/php8.2-fpm.sock,应显示类似 srw-rw---- 1 www-data www-data
Permission denied 多因 listen.owner/group 与 Nginx 运行用户不一致,可用 ps aux | grep nginx 查看 USER 列确认若并发量常超 500,Unix socket 可能出现 Resource temporarily unavailable,可通过以下方式缓解:
net.core.somaxconn=4096、net.unix.max_dgram_qlen=4096
listen 80 backlog=1024;
listen.backlog = 1024(默认仅 128)/dev/shm/(内存文件系统),但需确保权限和生命周期管理