proxy_busy_buffers_size 控制nginx反向代理中“正在发送给客户端”的缓冲区数据总量上限,默认为proxy_buffer_size的两倍(如8k或16k),须小于proxy_buffers总容量,且需与proxy_buffering、proxy_buffers等指令协同生效。

proxy_busy_buffers_size 是 Nginx 代理模块中一个关键的缓冲区控制参数,它决定了在后端响应尚未完全接收完毕、但已有一部分数据可向客户端发送时,Nginx 允许同时处于“繁忙”(即正在发送给客户端)状态的缓冲区总大小。
它控制什么?
当 Nginx 作为反向代理,从上游服务器接收响应时,会先把数据暂存在内存缓冲区里。如果响应很大或网络较慢,Nginx 不会等全部收完再发,而是边收边发——但只允许一部分缓冲区“忙于发送”,其余缓冲区需保持空闲以继续接收新数据。
proxy_busy_buffers_size 就是这个“正在发送中”的缓冲区数据总量上限。
它的默认值通常是 proxy_buffer_size 的两倍(而 proxy_buffer_size 默认为 4k 或 8k,取决于平台),常见默认值为 8k 或 16k。
和哪些指令协同工作?
它不是独立起作用的,必须结合以下指令理解:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- proxy_buffering on;:必须开启缓冲(默认开启),否则该参数无效
-
proxy_buffers N SIZE;:定义总共分配多少个缓冲区,每个多大(如
proxy_buffers 8 16k表示共 8 个 × 16k = 128k 缓冲空间) - proxy_buffer_size SIZE;:单独为响应头分配的缓冲区大小(不计入 proxy_buffers 总量)
真正生效的逻辑是:
→ 所有已接收但未发送完的数据,被分装在若干缓冲区中
→ 其中“正发着”的缓冲区数据总和 ≤ proxy_busy_buffers_size
→ 剩余缓冲区必须空闲,用于继续接收后端新数据
什么时候需要调大它?
典型场景是:后端返回大量小块响应(比如流式 JSON、SSE、大文件分片传输),且客户端网络较慢(如移动设备)。此时若 busy 缓冲区太小,Nginx 会频繁等待“忙缓冲区腾出空间”,导致接收卡顿、后端连接堆积、甚至超时。
建议调整方式:
- 先确认瓶颈:用
nginx -t && nginx -s reload配合观察upstream sent too big header或client timed out日志 - 检查当前缓冲配置:
proxy_buffers总容量是否足够(至少 ≥ 2× 期望的 busy 大小) - 合理设值:一般设为
proxy_buffer_size的 2–4 倍,或单个proxy_buffers单元大小的 2 倍。例如:proxy_buffer_size 8k;<br> proxy_buffers 16 16k;<br> proxy_busy_buffers_size 32k;
注意事项
它不能大于 proxy_buffers 总容量(即 N × SIZE),否则 Nginx 启动时报错:“proxy_busy_buffers_size must be less than the size of all buffers”。
它也不影响响应头处理——响应头始终由 proxy_buffer_size 单独承载,且必须能完整存下整个 header(否则报 502)。
不复杂但容易忽略:调大它本身不增加内存占用,只是改变已有缓冲区的使用策略;真正增加内存的是 proxy_buffers 的数量和单个大小。










