nginx与后端连接超时由proxy_connect_timeout(http)或fastcgi_connect_timeout(fastcgi)控制,仅限制tcp建连时间;推荐内网3–5秒、跨区5–8秒,并须同步配置read/send timeout及后端空闲关闭时限。

Nginx 与后端服务(如 PHP-FPM、Tomcat、Node.js 等)的连接超时,由 proxy_connect_timeout(HTTP 代理场景)或 fastcgi_connect_timeout(FastCGI 场景)控制,它只管“TCP 连接是否建立成功”,不涉及 SSL 握手、请求发送或响应读取。
这个值设得过大,会掩盖网络或后端启动问题;设得太小,又可能在偶发抖动时误判。合理配置需结合部署环境和后端稳定性。
proxy_connect_timeout:控制建连阶段超时
作用:Nginx 向 upstream 发起
connect()系统调用后,等待 TCP 三次握手完成的最大时间日志表现:
upstream timed out (110: Connection timed out) while connecting to upstream默认值:60 秒(太长,不建议保留)
-
推荐值:
- 同机房/内网直连:3–5 秒
- 跨可用区或带中间网络设备(如 SLB、防火墙):5–8 秒
- 高可用但启动较慢的服务(如冷启动 Java 应用):可临时设为 10 秒,但应配合健康检查优化
-
配置位置(在
location块中):location / { proxy_pass http://backend; proxy_connect_timeout 5s; }
⚠️ 注意:该指令仅对
proxy_pass生效;若用fastcgi_pass,需改用fastcgi_connect_timeout,逻辑相同。
fastcgi_connect_timeout:FastCGI 场景专用
- 适用场景:PHP-FPM、Python uWSGI(通过 FastCGI 协议通信)
- 行为一致:控制 Nginx 与 php-fpm.sock 或 127.0.0.1:9000 建立连接的等待上限
- 配置示例:
location ~ \.php$ { fastcgi_pass backend_php; fastcgi_connect_timeout 5s; # 其他 fastcgi_* 参数需同步校准(见下文) }
必须同步校准的配套参数
单调 connect_timeout 不解决问题,必须闭环设置以下三项,否则连接池无法复用,反复建连仍会触发超时:
-
proxy_read_timeout或fastcgi_read_timeout:读响应头的超时(建议 10–30s) -
proxy_send_timeout或fastcgi_send_timeout:两次写操作间隔(通常保持默认或设为 30s) - 后端自身空闲关闭时限(如 PHP-FPM 的
request_terminate_timeout、Tomcat 的connectionTimeout)必须 ≥ 对应 Nginx 的read_timeout
例如 PHP-FPM 中需确认:
; www.conf request_terminate_timeout = 30s
不要混淆 keepalive_timeout
-
keepalive_timeout 65;是控制 客户端到 Nginx 的长连接空闲时长,和 upstream 完全无关 - 真正影响 Nginx 到后端连接复用的是
upstream { keepalive 32; }+proxy_http_version 1.1;+proxy_set_header Connection '';
不复杂但容易忽略











