brotli_buffers 控制brotli压缩的缓冲区数量与单个大小,格式为“数量 大小”,影响内存占用、压缩稳定性及并发性能;需根据并发数、响应体大小和可用内存合理配置,避免过小导致失败或过大浪费资源。

要让 Brotli 压缩真正生效且不拖慢响应,brotli_buffers 这个参数不能忽略——它不是“可有可无”的缓冲区开关,而是直接影响内存使用效率和并发压缩稳定性的关键配置。
brotli_buffers 控制什么
该指令定义用于 Brotli 压缩的缓冲区数量与单个大小,格式为 brotli_buffers 数量 大小(如 brotli_buffers 16 8k)。Nginx 会为每个压缩响应动态分配这些缓冲区,用来暂存压缩过程中的中间数据。若设置过小,可能触发频繁内存申请或压缩失败;若过大或过多,则浪费内存、增加上下文切换开销。
- 默认值通常是
32 4k或16 8k(取决于平台页大小) - 实际占用内存 = 缓冲区数量 × 单个大小(例如
16 8k≈ 128KB/请求) - 它只在
brotli on且响应需压缩时才启用,不压缩时完全不消耗
按服务器资源合理设值
不必盲目套用高配数值,应结合你 Nginx 的并发连接数、平均响应体大小和可用内存来调整:
- 低流量小站(brotli_buffers 8 4k(约 32KB),够用且轻量
- 中高流量站点(500–2000 并发):推荐
brotli_buffers 16 8k(128KB),平衡吞吐与稳定性 - 大文本服务(如 API 返回长 JSON):可升至
brotli_buffers 32 8k,避免因缓冲不足回退到未压缩 - 内存紧张的容器环境:优先减数量而非大小,例如
brotli_buffers 8 8k(64KB),比16 4k更易管理
配合 brotli_min_length 避免无效分配
brotli_buffers 只对超过 brotli_min_length 的响应起作用。若该阈值设得太低(比如 20 字节),大量小响应会反复申请释放缓冲区,反而增加开销。
- 建议将
brotli_min_length设为1k或2k,过滤掉微小响应 - 这样
brotli_buffers实际生效频率大幅下降,内存更可控 - 搭配
brotli_comp_level 4–6使用,压缩耗时与缓冲压力更匹配
验证是否生效
光写配置不等于起效。可通过以下方式确认:
- 运行
nginx -t确保语法正确(含brotli_buffers) - 检查响应头:
curl -I -H "Accept-Encoding: br" https://yoursite.com/test.js,确认含Content-Encoding: br - 观察内存变化:压测前后用
ps aux | grep nginx对比 worker 进程 RSS 增量,异常飙升说明缓冲设置过激











