Nginx gzip/Brotli 性能调优实战
网站性能直接影响用户体验和搜索引擎排名。本文将分享 Nginx gzip 和 Brotli 压缩的实战调优配置,帮助你显著减少页面传输体积。
1. gzip 开启与基础配置
在 nginx.conf 的 http 块中添加:
http {
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_header "Cache-Control: no-cache";
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/json
application/xml
application/xml+rss
application/atom+xml
image/svg+xml
application/vnd.ms-fontobject
font/ttf
font/woff
font/woff2;
}
2. Brotli 插件配置(推荐}
Brotli 压缩率比 gzip 高 15-20%,现代浏览器均已支持:
# 安装 Brotli 模块
apt-get install libbrotli-dev
# 或从源码编译带有 brotli 的 nginx
./configure --add-module=../nginx-brotli-module
# nginx.conf 配置
http {
brotli on;
brotli_comp_level 6;
brotli_min_length 20;
brotli_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/json
application/xml
image/svg+xml
font/ttf
font/woff
font/woff2;
}
3. 压缩等级选择
压缩等级平衡 CPU 与体积:
gzip_comp_level 1-3: CPU 占用低,压缩率一般gzip_comp_level 4-6: 推荐平衡点gzip_comp_level 7-9: CPU 占用高,压缩率极佳但收益递减
建议生产环境使用 6,高流量站点可酌情调低至 5 以节省 CPU。
4. 避免压缩不可压缩内容
已压缩格式会浪费 CPU,配置忽略:
gzip_proxied expired no-cache no-store private auth;
gzip_types ~^(?:text|application/(?:json|xml|javascript|protoml))|~^(image/svg\+xml|font/(?:ttf|woff[2]?))|~^(application/(?:vnd\.ms-fontobject|json\.ld))$;
5. 实测效果对比
| 配置 | HTML 体积 | CSS 体积 | 传输时间 |
|---|---|---|---|
| 未压缩 | ≈ 24KB | ≈ 15KB | 基准值 |
| gzip level 6 | ≈ 6KB | ≈ 3.5KB | ≈ 70% 缩减 |
| Brotli level 6 | ≈ 4.5KB | ≈ 2.5KB | ≈ 80% 缩减 |
6. 验证配置生效
# 测试 gzip
curl -H "Accept-Encoding: gzip" -sI https://www.zz1984.com/ | grep -E "Content-Encoding: gzip"
# 测试 Brotli
curl -H "Accept-Encoding: br" -sI https://www.zz1984.com/ | grep -E "Content-Encoding: br"
# 查看实际压缩率
curl -H "Accept-Encoding: gzip, br" -s https://www.zz1984.com/article.html | wc -c
总结
启用 Brotli 并配置合适的 gzip 等级,可以将页面传输体积减少 60-80%,显著提升页面加载速度和 SEO 排名。记得在 CDN 层面也要开启同等配置。
配合 Cache-Control 头部使用,可进一步减少回传流量。持续监控页面性能指标,根据流量变化调整压缩配置。