proxy_busy_buffers_size 控制 Nginx 已收未发数据的内存上限,应设为 proxy_buffers 总量的 1/4 至 1/2(不低于单 buffer 大小),需配合 proxy_buffering on、合理设置 proxy_buffer_size 及超时等参数协同生效。

proxy_busy_buffers_size 的核心作用是控制 Nginx “已从后端接收、但尚未全部发送给客户端”这部分数据的内存上限。它不决定能收多少,只管“卡在半路”的数据最多占多大空间。调得合适,才能让 Nginx 在大响应下既不停止读上游,也不因忙区占满而拖慢发包。
按 proxy_buffers 总量比例设置
这个值不能孤立配置,必须与 proxy_buffers 挂钩:
- 若用 proxy_buffers 8 128k(总量 1MB),建议设为 128k–256k
- 若用 proxy_buffers 16 256k(总量 4MB),可设为 1m–2m
- 通用原则:取 proxy_buffers 总大小的 1/4 至 1/2,且不低于单块 buffer 大小(如 128k)
- 必须满足:proxy_busy_buffers_size ≤ proxy_buffers 总大小,否则 Nginx 启动报错
区分响应类型,避免一刀切
不是所有大响应都适合统一放大 busy 值:
- 中小响应(如 SSR 首屏 HTML、API JSON,约 50–100KB):按总量比例设即可,重点保障响应头不溢出,可同步将 proxy_buffer_size 提至 16k–32k
- 持续流式响应(如 SSE、日志 tail、gRPC-Web):直接 proxy_buffering off,此时该参数不生效,Nginx 边收边传,延迟更低
- 一次性大文件下载(如安装包、镜像):也推荐 proxy_buffering off;若必须开启(例如需改写 header 或加签名),则 busy 值宜设为单 buffer 大小的 2–4 倍(如 buffer 是 256k,busy 设 512k–1m)
验证是否真正起效
改完 reload 后,要观察实际行为信号,而非仅看语法通过:
- 用 curl -I 请求,检查响应头是否有 Content-Length(说明未被 chunked 截断),或含 X-Accel-Buffering: no(说明 buffering 已关)
- 查 error log 是否仍有 upstream response is buffered to a temporary file —— 若有,说明整体缓冲仍不足,需同步调大 proxy_buffers 或优化临时文件策略
- 监控 access log 中的 $upstream_response_time 与 $request_time 差值:若后者显著更长,说明数据积压在 busy 区未及时发出
配套关键协同点
单独调这个参数效果有限,必须配合其他设置:
- proxy_buffering on 是前提,关闭后该参数完全失效
- proxy_buffer_size 应 ≥ 响应头预期最大尺寸(如含 JWT、长 Cookie 时设为 16k–32k),但它和 busy 值无关,不可混调
- 若需落盘,建议 proxy_temp_file_write_size 256k + proxy_temp_path 挂 SSD 或内存盘(如 /dev/shm),减少小块 I/O
- 搭配 proxy_read_timeout(如 300s)防止大响应中途超时中断


















