proxy_busy_buffers_size的核心作用是防止Nginx边收边发大响应时因“已接收但未发送完”数据堆积导致上游阻塞或TCP窗口收缩;它约束“忙”缓冲区(已读入正发送的数据),需按proxy_buffers总量的1/4–1/2设置,且不低于单块大小。

proxy_busy_buffers_size 的核心作用是防止 Nginx 在边收边发大响应时,因“已接收但未发送完”的数据堆积过多,导致上游后端被阻塞或 TCP 窗口收缩。它不解决缓存本身,而是保障缓冲区流转顺畅,避免网关级写入卡顿。
理解它的实际约束位置
这个参数管的是“忙”缓冲区——即数据已从后端读入、正往客户端发送但尚未完成的那部分内存。它和 proxy_buffers 总量强相关,但不是独立起效:
- 设得太小(如保持默认 8k),Nginx 很快判定“忙区满”,主动暂停从后端读取,后端连接就会挂住、等待,表现为超时或 RST
- 设得太大(比如超过 proxy_buffers 总量的一半),空闲缓冲区变少,影响并发接收能力,尤其在多请求混发时容易争抢
- 它和 proxy_buffer_size 无关,后者只存响应头;也不影响磁盘落盘逻辑,那是 proxy_temp_path 和 proxy_max_temp_file_size 控制的
按 proxy_buffers 总量比例设置
先确认 proxy_buffering on 已启用,再按以下方式匹配:
- 若用 proxy_buffers 8 128k(总 1MB),proxy_busy_buffers_size 推荐设为 128k–256k
- 若用 proxy_buffers 16 256k(总 4MB),可设为 1m–2m
- 通用原则:取 proxy_buffers 总量的 1/4 到 1/2,且不低于单块大小(如 128k)
结合响应类型动态调整
不是所有大响应都适合统一调大:
- 中小 HTML/JSON 响应(
- 大文件下载或流式日志(SSE/tail):建议 proxy_buffering off,此时该参数不生效,直接透传更稳
- 响应头较大(含长 Cookie 或 gzip_vary):可同步调高 proxy_buffer_size 至 16k,但 busy 值仍按 body 缓冲逻辑设,不必跟着加
验证是否真正缓解阻塞
改完配置 reload 后,别只看服务是否启动,重点观察两个信号:
- 用 curl -I 请求,检查响应头是否含 Content-Length(说明未被 chunked 截断,缓冲完整)
- 监控后端连接状态:如果后端 access log 中出现大量短连接、close_wait 或超时日志,大概率是 busy 值过小导致读取中断
- 配合 nginx stub_status 模块,观察 Active connections 和 Writing 数值是否持续高位滞留


















