proxy_busy_buffers_size需与proxy_buffering、proxy_buffers协同配置,仅限制“已收未发”响应体内存上限,建议设为proxy_buffers总量的1/4至1/2且不低于单块大小。

直接调高 proxy_busy_buffers_size 并不能单独解决问题,关键在于它和 proxy_buffering、proxy_buffers 的协同关系。它控制的是“已接收但还没发完”的那部分响应体最多能占多少内存,设小了会卡住后端读取,设大了又可能挤占缓冲资源,导致实际吞吐下降。
明确它的作用边界
这个参数不决定 Nginx 能收多大响应,只限制“收了但没发完”的数据上限。它和响应头无关(那是 proxy_buffer_size 的事),也不影响落盘行为(那是 proxy_max_temp_file_size 控制的)。
- 设得太小(比如默认 8k),Nginx 很快认为“忙区满了”,主动暂停从后端读数据——后端 TCP 窗口被压,甚至触发超时断连
- 设得太大(比如超过
proxy_buffers总量的一半),空闲缓冲区变少,反而降低并发接收能力 - 它只在
proxy_buffering on时生效;关掉就完全不参与逻辑
按 proxy\_buffers 总量比例设置
先确认 proxy_buffering on 已启用,再按以下方式配比:
-
proxy_buffers 8 128k→ 总量 1MB,proxy_busy_buffers_size建议 128k–256k -
proxy_buffers 16 256k→ 总量 4MB,proxy_busy_buffers_size可设为 1m–2m - 通用原则:取
proxy_buffers总量的 1/4 到 1/2,且不低于单块大小(如 128k)
结合响应特征做适配
不是所有“大响应”都一样处理:
- 中小响应(如 SSR 页面 HTML、API JSON,几十 KB 级):按上述比例设即可,重点防阻塞
- 持续流式响应(如日志 tail、SSE):建议
proxy_buffering off,此时该参数不生效,无需调整 - 后端响应头较大(含长 Token 或多层网关 Header):可同步调高
proxy_buffer_size(如设为 16k),但proxy_busy_buffers_size仍按 body 缓冲逻辑设,不必跟着加
验证是否真正起效
改完配置 reload 后,不能只看服务是否启动,要观察两个信号:
- 用
curl -I请求,检查响应头是否含X-Accel-Buffering: no(说明 buffering 已关)或有完整Content-Length(说明未被 chunked 截断) - 监控后端连接状态:若之前频繁出现 “connection reset by peer” 或 “upstream timed out”,调优后应明显减少











