proxy_buffering 不改变 $upstream_response_time 计算,但显著影响 $request_time:开启时因缓冲导致客户端感知延迟拉长,关闭时 $request_time 更贴近端到端真实耗时,但牺牲稳定性与优化能力。

proxy_buffering 本身不直接参与“响应时间”的计时逻辑,它也不改变 Nginx 内置的 $upstream_response_time 或 $request_time 变量的计算方式。但它的开启或关闭,会显著影响客户端实际感知到的响应延迟,进而让监控中看到的“响应时间”出现偏差或失真。关键在于:它改变了数据从后端发出到客户端接收之间的传递节奏。
响应时间变量如何工作(前提)
Nginx 的两个核心时间变量含义明确:
$upstream_response_time:从 Nginx 向后端发起请求开始,到收到后端第一个字节响应为止所用时间(单位秒,含小数)。
✅ 它只统计“后端处理+网络往返”,与proxy_buffering开关无关。$request_time:从 Nginx 接收客户端请求首字节开始,到向客户端发送完最后一个字节为止的总耗时。
⚠️ 这个值受proxy_buffering影响极大——因为是否缓冲、何时发、发多少,决定了“发送完最后一个字节”的时机。
proxy_buffering = on(默认)时的响应时间表现
此时 Nginx 按缓冲策略分批读取、暂存、再发送响应体,导致:
- 小响应(≤
proxy_buffer_size+proxy_buffers总量):基本一次读完,$request_time ≈ $upstream_response_time + 网络传输时间,偏差小; - 大响应或流式响应(如 SSE、日志 tail):
- 若
proxy_busy_buffers_size过小,Nginx 频繁暂停读上游,等客户端消费缓冲区 →$request_time被拉长,且波动变大; - 若后端已快速返回全部数据,但客户端弱网慢读,Nginx 仍需等待其读完所有缓冲内容 →
$request_time显著大于$upstream_response_time,容易误判为“后端慢”。
- 若
示例:后端 100ms 返回完整 5MB 文件,但手机客户端每秒仅读 200KB。
proxy_buffering on下,Nginx 要等约 25 秒才发完,$request_time记为 ~25.1s,而$upstream_response_time仍是 0.1s。
proxy_buffering = off 时的响应时间表现
Nginx 边收边发,不暂存响应体:
-
$upstream_response_time不变(仍为后端首字节时间); -
$request_time更贴近“端到端真实耗时”,尤其对流式场景:- 客户端收到第一个字节更快(无缓冲等待);
- 最后一个字节发送时刻由后端输出节奏和客户端接收能力共同决定;
- 但代价是:失去缓冲带来的错误重试、响应头预处理、失败回退等能力;且若后端写得慢,Nginx worker 会长期阻塞在
upstream send阶段。
适合 SSE、WebSocket 升级前的 HTTP 长连接、实时日志推送等低延迟敏感型路径。
如何让响应时间监控更可信
-
不要单看
$request_time判定后端性能:必须配合$upstream_response_time对比。若后者稳定在 100ms,而前者飙升至数秒,大概率是客户端侧或缓冲配置问题; -
按路径差异化配置:
- API 接口(JSON 小响应):保持
proxy_buffering on,调优proxy_buffers和proxy_busy_buffers_size; -
/events、/stream类路径:显式proxy_buffering off,并加proxy_read_timeout 3600、X-Accel-Buffering no;
- API 接口(JSON 小响应):保持
-
记录 error 日志中的线索:
- 出现
upstream timed out (110: Connection timed out) while reading upstream→ 检查proxy_read_timeout和后端健康度; - 出现
client closed connection while sending to client→$request_time高但非后端问题,属客户端中断;
- 出现
-
避免用
proxy_buffering off全局兜底:它掩盖了真实瓶颈(比如后端慢),还可能引发连接堆积或超时连锁反应。
proxy_buffering 不改计时器,但改数据流——响应时间的数字是否反映真相,取决于你有没有让它匹配业务的真实交付模式。


















