$upstream_connect_time 记录nginx与upstream完成tcp握手耗时(秒,毫秒精度),仅在实际转发并建连后赋值,不包含ssl和dns耗时;空值表示未走upstream,-表示连接失败,复用keepalive时接近0。

要监控上游服务的连接建立耗时,$upstream_connect_time 是 Nginx 内置的关键变量,它记录了与 upstream 服务器完成 TCP 握手所用的时间(单位:秒,支持毫秒精度),是诊断骨干网延迟、DNS 解析异常或后端节点网络抖动的重要依据。
理解 $upstream_connect_time 的触发时机和取值逻辑
该变量仅在请求实际发起 upstream 转发且完成 TCP 连接后才被赋值;若请求未走到 upstream(如命中本地缓存、被 rewrite 截断、或配置了 proxy_pass 但未匹配 location),其值为空字符串。它不包含 SSL 握手时间(那是 $upstream_header_time 的一部分),也不包含 DNS 解析耗时(除非使用 resolver + 变量域名,此时解析发生在连接前,不计入此变量)。
- 成功建立 TCP 连接:值形如 0.002(2ms)、0.157(157ms)
- 连接超时或拒绝:Nginx 默认记为 -(短横线),但可通过 proxy_next_upstream error timeout 触发重试,此时该变量记录的是最后一次尝试的连接时间
- 使用 keepalive 连接池时:每次复用已有连接,该值通常极低(≈0.000),反映的是“复用开销”,而非真实建连延迟
在日志中结构化记录连接耗时用于分析
将 $upstream_connect_time 写入 access_log,便于用日志分析工具(如 ELK、Grafana Loki)聚合统计 P95/P99 延迟、识别慢节点:
log_format upstream_detail '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$upstream_addr $upstream_connect_time '
'$upstream_header_time $upstream_response_time';
注意:务必搭配 $upstream_addr 使用,才能区分不同后端 IP/端口的连接表现;若 upstream 使用域名,$upstream_addr 显示解析后的 IP,可反查对应节点。
结合 map 和 limit_req 实现动态延迟熔断
当某 upstream 节点连接耗时持续偏高,可利用 $upstream_connect_time 配合 map 构建“延迟标记”,再通过 limit_req 控制流量分发:
map $upstream_connect_time $connect_slow {
~^[0-9]+\.[5-9][0-9]{2,}$ 1; # > 0.5s 认为慢(正则匹配 0.500+)
default 0;
}
<p>limit_req_zone $binary_remote_addr$connect_slow zone=delay_fuse:10m rate=10r/s;</p>
这样,一旦某个客户端连续触发慢连接,就会被限流,避免雪崩扩散。实际使用中建议配合 stub_status 或 prometheus exporter 暴露指标,而非仅依赖日志轮询。
排查常见误判场景:为什么数值看起来不合理?
遇到 $upstream_connect_time 异常大或全为“-”,先检查这些环节:
- upstream 配置是否生效:确认 proxy_pass 指向的是有效的 upstream name,而非直写 IP(后者会使 $upstream_addr 和 $upstream_connect_time 不可用)
- 连接是否真走到了 upstream:用 curl -v 或 nginx -T 检查 location 匹配与 rewrite 流程,确保没被 return / error_page 提前终止
- keepalive 设置影响:启用 keepalive 且连接池充足时,绝大多数请求会复用连接,$upstream_connect_time ≈ 0 —— 这是正常现象,不代表网络无问题,需结合首次建连日志或 tcpdump 分析
- 系统级限制干扰:如 ulimit -n 过低、net.ipv4.ip_local_port_range 狭窄、TIME_WAIT 过多,都可能导致 connect() 系统调用阻塞,使该值升高











