fastcgi_connect_timeout控制Nginx与PHP-FPM建立TCP连接的三次握手超时,非脚本执行或数据传输超时;默认60秒,同机部署建议5~10秒、跨主机15~30秒,超时触发502/504错误。

fastcgi_connect_timeout 控制 Nginx 与 PHP-FPM 建立初始连接的等待上限,不是处理时间,而是“握手阶段”的最长容忍时长。它不解决脚本执行慢的问题,但能防止因 PHP-FPM 进程卡死、监听异常或网络抖动导致 Nginx 长时间挂起,进而拖垮整个 worker 进程。
什么时候需要调大这个值?
默认值通常是 60 秒,但在以下场景中容易触发超时,需针对性调整:
- PHP-FPM 启用了
ondemand模式,且请求低峰期子进程已全部退出,新请求到来时需冷启动 FPM 子进程(含加载扩展、读配置等),耗时可能达数秒甚至十几秒 - 服务器负载高、CPU 或 I/O 严重争用,导致 PHP-FPM 无法及时响应 accept() 调用
- PHP-FPM 监听在 TCP 端口(如
127.0.0.1:9000)而非 Unix socket,中间经过内核协议栈,受网络栈延迟影响更明显 - 使用了容器化部署(如 Docker),宿主机与容器间存在额外网络层或 iptables 规则延迟
合理设置范围与判断依据
不建议盲目设为 300 秒甚至更高。应结合实际观测数据设定,原则是“略高于 P95 建连耗时”:
- 通过
strace -p $(pgrep php-fpm) -e trace=accept,connect或tcpdump -i lo port 9000抓包,观察真实建连延迟 - 查看 Nginx error.log 中类似
upstream timed out (110: Connection timed out) while connecting to upstream的报错频率和时间戳 - 若 95% 的建连在 2 秒内完成,设为
3s即可;若偶发 8 秒延迟,可设为10s;超过 15 秒仍未建立,大概率是 PHP-FPM 已无可用进程或监听异常,此时加 timeout 不解决问题,应查 FPM 状态
配合其他 fastcgi 参数协同生效
单独调大 fastcgi_connect_timeout 效果有限,必须同步检查并优化关联参数:
立即学习“PHP免费学习笔记(深入)”;
-
fastcgi_read_timeout:应 ≥fastcgi_connect_timeout,否则建连成功后读响应又超时,前功尽弃 -
php-fpm.conf中的pm.start_servers、pm.min_spare_servers:避免 ondemand 模式频繁启停,改用static或dynamic并预留足够空闲进程 -
listen.backlog(PHP-FPM):确保内核连接队列不丢包,建议设为 512 或更高(需同时调大系统net.core.somaxconn) - Nginx 的
worker_connections和worker_rlimit_nofile:保证自身不会因文件描述符不足而无法发起新连接
典型安全配置示例(供参考)
在 http{} 或 server{} 块中添加:
fastcgi_send_timeout 60;
fastcgi_read_timeout 60;
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;



















