Nginx Gzip压缩类型与压缩级别调优
时间:2026-11-15 07:13 作者:emer 分类: Nginx
前言
未压缩的 HTML、JS、CSS 体积大,加载慢、耗带宽。Nginx gzip 在传输前压缩响应,显著减小体积。默认只压 html,需要手动加入 JS/CSS/JSON,并选择合适压缩级别。本文讲解完整 gzip 配置、压缩类型、级别权衡和验证。
操作步骤
1. 在 http 块开启 gzip
gzip on;
gzip_comp_level 6;
gzip_min_length 1k;
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
gzip_vary on;
gzip_proxied any;
2. 参数说明
- gzip_comp_level 1–9,越高压得越小越耗 CPU。
- gzip_types 指定压缩的 MIME(text/html 默认已压)。
- gzip_min_length 小于该值不压,避免小文件得不偿失。
- gzip_vary on 给响应加 Vary: Accept-Encoding。
3. 不压缩已压缩资源
图片 jpg/png、视频、已压缩安装包不要再 gzip。
4. 校验并重载
nginx -t && nginx -s reload
5. 验证响应是否压缩
curl -H "Accept-Encoding: gzip" -I https://域名/app.js
响应头含 Content-Encoding: gzip 即生效。
常见坑
- gzip_types 漏写 application/javascript,JS 没被压缩。
- 压缩级别开到 9,CPU 占用高收益却很小,一般 6 即可。
- 对图片视频再压缩,白费 CPU 还可能增大。
- 只在 server 块写,被 http 块默认覆盖。
- 前端已构建压缩,重复压缩意义不大。
- 老浏览器不支持 gzip,可配 gzip_disable 排除。
- 没加 Vary,缓存层给不同客户端发错版本。
总结
gzip on + gzip_types 覆盖文本/JS/CSS/JSON,comp_level 取 6,min_length 过滤小文件。只压文本不压图片视频。curl 带 Accept-Encoding 验证 Content-Encoding,级别高了只增 CPU。
遇到问题加QQ23979811 协助处理