Nginx 通过 fastcgi_connect_timeout、fastcgi_send_timeout 和 fastcgi_read_timeout 控制 FastCGI 各阶段超时,需与 PHP-FPM 的 request_terminate_timeout 协同配置,防止死连接和资源泄漏。

Nginx 本身不直接管理 PHP-FPM 进程的生命周期,但可以通过合理配置 FastCGI 超时参数,让 Nginx 在等待 PHP-FPM 响应超时后主动断开连接,避免“挂起”的死连接长期占用 worker 和文件描述符。关键不是“代理 TCP 连接”,而是控制 FastCGI 请求链路上各阶段的等待时限。
fastcgi_connect_timeout:控制建连阶段超时
这个参数决定 Nginx 尝试连接 PHP-FPM(如 Unix socket 或 127.0.0.1:9000)的最大等待时间。
- 若 PHP-FPM 未启动或 socket 文件路径错误,Nginx 会在该时间内失败并报 502
- 建议设为
3s~5s,太长会拖慢失败响应,太短可能误判瞬时抖动
fastcgi_send_timeout 和 fastcgi_read_timeout:协同管理请求/响应阶段
-
fastcgi_send_timeout:Nginx 向 PHP-FPM 发送完整 FastCGI 请求包的最长时间(含 header + body)。适用于大 POST 数据上传场景。 -
fastcgi_read_timeout:Nginx 等待 PHP-FPM 返回完整响应的最长时间(从发送完请求开始计时)。这是防“卡死”最核心的参数。
⚠️ 注意:这两个 timeout 是针对单次请求的端到端等待,不是空闲超时;它们生效于
location ~ \.php$ { ... }块内,且只影响 FastCGI 流程。
常见稳妥配置示例:
立即学习“PHP免费学习笔记(深入)”;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_connect_timeout 5s;
fastcgi_send_timeout 60s;
fastcgi_read_timeout 60s; # PHP 脚本执行超过 60 秒,Nginx 主动断连,返回 504
}PHP-FPM 侧必须同步匹配,否则 Nginx 断连也无意义
Nginx 的 fastcgi_read_timeout 60s 只是“等多久”,真正决定脚本是否被强制终止的是 PHP-FPM 的 request_terminate_timeout(注意不是 max_execution_time)。
- 若 PHP-FPM 配置
request_terminate_timeout = 0,脚本可无限运行 → Nginx 等满 60 秒后断开,但 PHP 进程仍在跑,造成资源泄漏 - 正确做法:PHP-FPM 的
request_terminate_timeout应 ≤ Nginx 的fastcgi_read_timeout,例如设为30s,确保进程级及时回收
在 /etc/php/*/fpm/pool.d/www.conf 中调整:
request_terminate_timeout = 30s pm.max_children = 50 # 根据内存和并发需求设置,防排队耗尽 pm.max_requests = 1000 # 防内存泄漏,定期重启子进程
补充:识别和清理已存在的死连接
- Nginx 不会自动“扫描并杀掉”已建立但静默的 FastCGI 连接(这不同于 stream 模块的
proxy_timeout) - 若发现大量
TIME_WAIT或ESTABLISHED却无数据的 socket,需检查:- 是否 PHP 脚本中有阻塞操作(如未设 timeout 的
file_get_contents、curl_exec) - 是否客户端提前关闭连接(触发 499),而 PHP 未做
connection_aborted()检查就继续执行
- 是否 PHP 脚本中有阻塞操作(如未设 timeout 的
可在 PHP 中加防护:
if (connection_aborted()) {
exit(); // 主动退出,释放进程
}也可在 Nginx 中忽略客户端中断(慎用):
fastcgi_ignore_client_abort off; # 默认即 off,建议保持,避免脏数据
不复杂但容易忽略



















