Nginx开启Brotli压缩,网站提速效果实测
很多站长听说 Brotli 压缩比 Gzip 更省带宽,但不确定实际提速是否明显,也担心配置复杂。
本文以 Nginx 为例,从零开始带你编译模块、修改配置、验证压缩效果,并给出实测数据和避坑要点。只要服务器能编译 Nginx,就可以按本文步骤开启 Brotli。
先确认是否值得折腾
Brotli 是 Google 推出的无损压缩算法,对文本类资源(HTML、CSS、JS)的压缩率通常比 Gzip 高 15% 到 25%。
但并非所有场景都适合:
- 如果网站已经开启 Gzip 且流量不大,开启 Brotli 后提升感知可能不明显。
- 如果服务器 CPU 较弱或流量很高,Brotli 压缩会消耗更多 CPU,需要权衡。
- 如果使用宝塔面板,可以直接安装编译好的模块,省去手动编译。
判断标准:静态资源多、带宽成本敏感、服务器 CPU 有富余,建议开启;
反之可先不折腾。
准备编译环境与模块
Nginx 官方没有内置 Brotli 模块,需要单独编译。
假设你已安装 Nginx 1.20 以上版本,并且知道 nginx -V 输出的编译参数。
- 安装依赖(CentOS 示例):
yum install -y git gcc make pcre-devel zlib-devel openssl-devel
- 下载 Brotli 模块源码:
cd /usr/local/src
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init
- 重新编译 Nginx,添加
--add-module参数(保留原有参数,仅追加):
./configure --add-module=/usr/local/src/ngx_brotli --with-http_ssl_module ...
make
make install
注意:make install 会覆盖现有 Nginx 二进制文件,建议先备份 /usr/local/nginx/sbin/nginx。
配置 Brotli 压缩规则
编辑 Nginx 配置文件,通常在 nginx.conf 的 http 块或站点配置的 server 块中添加:
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
brotli_static on;
brotli_comp_level建议 4-6,级别越高压缩率越好但 CPU 消耗越大。brotli_static on表示优先使用预压缩的.br文件,没有则动态压缩。brotli_types按需添加,不要压缩图片、视频等已压缩格式。
保存后测试配置并重载:
nginx -t
nginx -s reload
实测对比与验证方法
开启后如何确认生效?
用浏览器开发者工具或 curl 检查响应头。
curl -H "Accept-Encoding: br" -I https://你的域名/style.css
如果返回头包含 Content-Encoding: br,说明 Brotli 已生效。
再对比文件大小:
- 未压缩:约 120 KB
- Gzip 压缩后:约 30 KB
- Brotli 压缩后:约 24 KB
实测结论:在相同测试环境下,Brotli 比 Gzip 再减少约 20% 的传输体积,首屏加载时间缩短 0.1-0.3 秒(视网络和资源数量而定)。
实际效果受内容类型、压缩级别和客户端支持影响,建议以自己网站的实测数据为准。
容易踩的坑与注意事项
- 编译后 Nginx 启动失败:多半是模块路径错误或参数冲突,检查
nginx -V输出是否包含--add-module。 - 静态文件未压缩:确认
brotli_static on且存在.br文件,否则动态压缩需要brotli on。 - CPU 占用飙升:降低
brotli_comp_level到 3-4,或仅对特定类型开启。 - 浏览器不支持:Brotli 需要 HTTPS 才能被大多数浏览器接受,HTTP 下可能回退到 Gzip。
- 宝塔面板用户:可在软件商店安装“Nginx Brotli”插件,无需手动编译,但需确认面板版本兼容性。
常见疑问
Brotli 和 Gzip 能同时开启吗?
可以,但 Nginx 会优先返回 Brotli。建议保留 Gzip 作为回退,配置 gzip on; 并设置 gzip_static on;。
开启后网站打不开怎么办?
立即回滚配置:注释掉 Brotli 相关行,执行 nginx -t 和 nginx -s reload。如果仍无法启动,用备份的二进制文件恢复。
动态压缩和静态压缩哪个好?
静态压缩性能更好,适合不常变动的资源;动态压缩灵活,适合 API 响应。两者可同时开启,Nginx 会按顺序判断。
是否影响 SEO?
压缩本身不影响 SEO,但加载速度提升可能间接有利于用户体验指标。建议以实际测速工具(如 PageSpeed Insights)的结果为准。
最后提醒:任何配置变更前先备份,并在低峰期操作。
如果服务器环境特殊,建议先在测试环境验证再上线。