nginx 不支持直接配置 brotli_window 或 brotli_lgwin 参数,其实际窗口大小由 brotli_comp_level 隐式决定:level 5 对应 lgwin=18(256kb),是弱网优化的黄金值,需在配置中明确设为 brotli_comp_level 5 并避免过高或过低等级。

Nginx 本身不原生支持 brotli_window(即 lgwin)参数配置。这个参数属于 Brotli 压缩算法底层的实现控制项,由 Google 的 brotli C 库定义,但 ngx_brotli 模块并未将其暴露为 Nginx 可配置的指令。
也就是说:你无法在 nginx.conf 中写 brotli_window 18 或 brotli_lgwin 18 —— 这类配置会直接报错 unknown directive。
真正生效的窗口大小,取决于你编译 ngx_brotli 时所链接的 brotli 库版本及其默认行为,以及 brotli_comp_level 的隐式影响:
-
brotli_comp_level 0–4:默认使用lgwin=17(128KB) -
brotli_comp_level 5–7:默认启用lgwin=18(256KB),这是移动端弱网最推荐的值 -
brotli_comp_level 8–11:可能升至lgwin=20(1MB)或更高,但会显著增加内存与首字节延迟
所以,想让窗口大小稳定落在 256KB(lgwin=18),核心做法是固定压缩级别为 5,并避免使用过高或过低等级。
关键操作不是配 window,而是选对 level
如何确保实际使用 lgwin=18(256KB)
-
在
http或location块中明确设:brotli on; brotli_comp_level 5; # ✅ 触发默认 lgwin=18 brotli_static off; brotli_types text/html text/css application/javascript application/json image/svg+xml; brotli_min_length 256;
不要设
brotli_comp_level 11期望“压得更狠”——它可能启用lgwin=22(4MB),导致 Nginx worker 内存占用翻倍,弱网下首帧延迟反升。若你用的是较新版本的
ngx_brotli(v1.0.0rc+,基于 Brotli v1.1.0+),可通过源码微调:修改ngx_brotli/ngx_http_brotli_filter_module.c中调用BrotliEncoderSetParameter(ctx->enc, BROTLI_PARAM_LGWIN, 18),然后重新编译模块。但这属于进阶定制,生产环境不建议。
为什么 256KB(lgwin=18)是黄金值?
- 覆盖 HTTP/2 帧典型大小(16–64KB)和 TCP MSS(1200–1400 字节),利于弱网分片重组
- HTML 模板中跨
/的重复结构(如 class 名、属性名、JS 框架前缀)基本能被查重捕获 - Android/iOS 主流 WebView 解压内存开销可控(实测
验证是否实际用了 lgwin=18?
无直接日志字段,但可通过间接方式确认:
- 用
curl -H "Accept-Encoding: br" -I https://yoursite.com/app.js查看Content-Encoding: br和Content-Length - 对比同文件用
brotli -q 5 --lgwin=18 file.js与brotli -q 5 --lgwin=16 file.js的压缩后体积:若 Nginx 压缩结果更接近前者,说明实际窗口≈18 - 抓包观察首字节时间(TTFB):
lgwin=18下 TTFB 稳定在 3–6ms(100KB HTML),而lgwin=22可能跳到 12ms+
不复杂但容易忽略:窗口大小不是开关,而是 level 的影子参数。盯住 brotli_comp_level 5,你就稳住了 256KB。











