proxy_busy_buffers_size的核心作用是控制Nginx“已从后端收完、但还没发完给客户端”的数据内存上限,作为背压闸门协同proxy_buffers使用,仅在proxy_buffering on时生效,须满足不低于单buffer大小、不超过buffers总量的硬约束。

proxy_busy_buffers_size 的核心作用是控制 Nginx “已从后端收完、但还没发完给客户端”这部分数据所占用的内存上限。它不是总缓存大小,而是一道关键的“背压闸门”——设小了,后端写入会被频繁阻塞;设大了,慢客户端可能长期占满缓冲,引发内存争抢甚至 OOM。
必须满足的硬性约束
这个参数只在 proxy_buffering on 时生效,且必须与 proxy_buffers 协同配置:
- 值不能低于单个 buffer 大小(例如
proxy_buffers 8 128k→ 单块为 128k,busy 至少设为128k) - 值不能超过 proxy_buffers 总容量(例如
proxy_buffers 16 256k→ 总量为 4MB,busy 最大只能设4m,超限会报错) - 默认值通常为 8k,对大多数高负荷场景严重不足,必须显式重设
按业务响应规模合理取值
推荐初始值 = proxy_buffers 总容量的 1/4 至 1/2,兼顾吞吐与稳定性:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- SSR 首屏 HTML(约 80–120KB):
proxy_buffers 8 128k;→proxy_busy_buffers_size 256k;或512k; - 大 JSON / 导出 CSV(2–5MB):
proxy_buffers 16 256k;→proxy_busy_buffers_size 1m;或2m; - 视频或安装包回源(≥10MB):建议直接
proxy_buffering off;,此时该参数不生效,避免内存堆积
必须同步调整的关键配套项
单独调 proxy_busy_buffers_size 几乎无效,需联动以下配置:
- 显式开启缓冲:
proxy_buffering on;(避免被上级 location 或默认值覆盖) - 设置合理超时:
proxy_read_timeout 90;和send_timeout 60;,防止慢连接长期锁住 busy 缓冲 - 响应头较大时(如含长 JWT、多 Cookie):
proxy_buffer_size 16k;,但它不影响 busy 值设定逻辑 - 关闭临时文件落盘便于观察内存行为:
proxy_max_temp_file_size 0;(仅限确认不会超限的场景)
验证是否真正起效
reload 后不能只看服务是否启动,要检查运行态信号:
- 用
curl -I请求,响应头中出现准确Content-Length(非 chunked),说明缓冲完整工作 - 日志中不再频繁出现
upstream timed out或upstream sent too big response - 监控 Nginx 进程内存使用趋势,避免因 busy 区域过大导致多连接下空闲 buffer 不足

















