proxy_busy_buffers_size控制内存中已接收但未发送完的响应体数据上限,仅在proxy_buffering开启时生效;流式场景应关闭缓冲,静态/SSR/JSON响应才需调优,推荐设为proxy_buffers总量的1/4至1/2。

proxy_busy_buffers_size 本身不控制“响应缓存写入”,它管的是 内存中已接收、但尚未发送完的响应体数据上限。所谓“缓存写入阻塞”,实际常是误读——真正卡住后端的,是 Nginx 在缓冲区调度失衡时暂停从上游读取,导致后端 write() 调用阻塞或超时断连。
要避免这种假性阻塞,关键不是孤立调大这个值,而是让它与 proxy_buffering 和 proxy_buffers 形成合理协同。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
它只在 proxy_buffering 开启时起作用
- 若配置中没写
proxy_buffering on;(哪怕默认开启),或某 location 下覆盖为proxy_buffering off;,该参数完全不参与逻辑。 - 流式场景(如 SSE、日志 tail、gRPC streaming)应明确关闭缓冲:
proxy_buffering off;,此时proxy_busy_buffers_size失效,无需设置。 - 静态文件、SSR 页面、JSON API 等典型 HTTP 响应,才需启用缓冲并调优 busy 值。
按 proxy_buffers 总量设值,不是拍脑袋
- 它不是独立内存池,而是从
proxy_buffers分配出的“忙区”上限。设错会直接引发阻塞:- 太小 → 刚收一点就停读上游,后端 TCP 窗口被压,出现
upstream prematurely closed connection - 太大(如 ≥ 总量 2/3)→ 空闲 buffer 不足,多请求争抢,吞吐反而下降
- 太小 → 刚收一点就停读上游,后端 TCP 窗口被压,出现
- 推荐范围:取
proxy_buffers总容量的 1/4 至 1/2,且 不低于单块大小:-
proxy_buffers 8 128k;(总量 1MB)→proxy_busy_buffers_size 256k;或512k; -
proxy_buffers 16 256k;(总量 4MB)→proxy_busy_buffers_size 1m;或2m;
-
区分响应类型,别一概而论
- 中小响应(SSR HTML、API JSON,几十 KB~几百 KB):适合开启缓冲,busy 值按上述比例设即可,重点防上游停读。
-
大文件下载(≥10MB):建议直接
proxy_buffering off;,让 Nginx 边收边转;若坚持用缓冲,需配合proxy_max_temp_file_size启用落盘,否则易 OOM。 -
响应头较大(含长 JWT、多层 Cookie):调高
proxy_buffer_size(如32k),但proxy_busy_buffers_size仍按 body 缓冲逻辑设,不必同步加。
验证是否真起效,别只 reload 就完事
- 用
curl -I https://your.site/path检查响应头:- 有
Content-Length→ 缓冲完整生效,未被 chunked 截断 - 出现
X-Accel-Buffering: no→ 缓冲已关闭,busy 参数不生效
- 有
- 查
error.log是否还有upstream timed out或client intended to send too large body类报错 - 对比
access_log中$upstream_response_length字段:调优后应稳定增长,不再频繁中断或归零
不复杂但容易忽略。

















