直接在nginx的http块中启用brotli压缩可高效覆盖全站静态与动态响应,需先安装ngx_brotli模块,再配置brotli on、comp_level 5、min_length 256、types等参数,并与gzip共存;验证需确认响应头含content-encoding: br。

直接在 Nginx 的 http 块中启用 Brotli 压缩,是覆盖全站静态与动态响应的最简高效方式。它不依赖 PHP 或应用层逻辑,压缩发生在 Nginx 输出前,开销低、生效快、兼容性强。
必须先安装并确认 ngx_brotli 模块
Brotli 不是 Nginx 内置功能,需手动编译加载 ngx_http_brotli_filter_module。宝塔用户需进入【软件商店】→ 重装 Nginx → 勾选自定义模块路径(如 /www/server/ngx_brotli);Linux 手动编译用户应在 ./configure 中加入 --add-module=/path/to/ngx_brotli。安装后执行 nginx -V 2>&1 | grep brotli,确认输出含 ngx_brotli 字样。
在 http 块内配置核心参数
打开 /etc/nginx/nginx.conf(或宝塔中的【Nginx 配置修改】),在 http { } 大括号内部、gzip 配置附近插入以下内容:
- brotli on; —— 启用压缩开关
- brotli_comp_level 5; —— 推荐值 4–6,5 是 HTML/JS/CSS 的平衡点
- brotli_min_length 256; —— 小于 256 字节的响应不压缩,避免无效开销
- brotli_types text/html text/css application/javascript application/json image/svg+xml text/plain application/xml; —— 精准限定文本类 MIME 类型,排除图片、字体等已压缩格式
-
brotli_vary on; —— 自动添加
Vary: Accept-Encoding响应头,确保 CDN 和浏览器正确缓存不同编码版本 -
brotli_static off; —— 若未预生成
.br文件,设为off;若已批量构建(如构建脚本中运行brotli -q 5 -k *.js),可设为on或always
务必与 gzip 共存且合理排序
Brotli 和 Gzip 可同时开启,Nginx 会根据客户端请求头中的 Accept-Encoding 自动协商。建议将 Brotli 配置放在 Gzip 配置之后(或之前),但两者互不影响。关键在于客户端支持:现代浏览器(Chrome ≥ 49、Firefox ≥ 44、Edge ≥ 18)在 HTTPS 下默认发送 Accept-Encoding: br,gzip,deflate,Nginx 会优先返回 br 编码内容。
验证是否真正生效
配置保存后执行 nginx -t && nginx -s reload。验证步骤如下:
- 用 Chrome 打开网站,F12 → Network → 刷新 → 点击任意 JS/CSS/HTML 资源 → 查看 Response Headers 中
content-encoding: br - 终端执行:
curl -I -H "Accept-Encoding: br" https://yoursite.com/test.js,确认响应头含content-encoding: br且content-length显著小于未压缩版本 - 对比同资源的
curl -I -H "Accept-Encoding: gzip"响应,Brotli 体积应小约 17–25%











