最直接有效的方式是用 Unix Socket 替代 TCP 连接,配置 PHP-FPM 监听 sock 文件、Nginx 改用 unix 域套接字并启用 fastcgi_keep_conn,配合调优 pm.max_requests 和超时参数,精简 fastcgi_param 与路径处理逻辑。

最直接有效的方式是用 Unix Socket 替代 TCP 连接,彻底绕过内核网络协议栈,避免三次握手、ACK确认、Nagle算法等开销。
改用 Unix Domain Socket 通信
本地进程间通信无需走网络层,Unix Socket 是文件系统级的字节流通道,延迟更低、吞吐更高:
- 在 PHP-FPM 配置中(如 /etc/php/8.2/fpm/pool.d/www.conf)设置:
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660 - Nginx 的 location 块中对应修改:
fastcgi_pass unix:/run/php/php8.2-fpm.sock; - 确保 Nginx worker 进程以 www-data 用户运行,且能读写该 socket 文件
启用 FastCGI 长连接复用
避免每个请求都新建连接,尤其在短平快接口(如 API、AJAX)场景下收益明显:
- 在 location 或 http 块中添加:
fastcgi_keep_conn on; - 要求 PHP-FPM 版本 ≥ 7.3(已默认支持),并检查其 pm.max_requests 不宜过小(如设为 1000+),防止连接被子进程主动关闭
- 配合设置连接超时:
fastcgi_connect_timeout 3s;(防卡死)
关闭 Nagle 算法(仅限 TCP 场景备用)
若因特殊原因仍需使用 TCP(如跨容器、调试环境),可在 upstream 或 fastcgi_pass 所在上下文中启用:
- tcp_nodelay on; —— 禁用小包合并,降低首字节延迟
- 注意:该指令作用于 Nginx 与后端建立的 TCP 连接,不是 FastCGI 协议层本身
- 不推荐作为首选方案;Unix Socket + keepalive 已覆盖绝大多数低延迟需求
精简传输路径,减少中间环节
避免无谓的代理跳转或额外封装:
- 禁用不必要的 fastcgi_param 传递(如未使用的 HTTP 头、冗余环境变量)
- 不启用 fastcgi_split_path_info(除非确实需要 PATH_INFO 支持),它会触发正则匹配开销
- 确保 fastcgi_index 和 SCRIPT_FILENAME 构造简洁准确,避免路径拼接错误导致重复 stat 调用


















