Nginx Gzip 压缩提速配置详解
Nginx Gzip 压缩提速配置详解
一、压缩为什么能提速
网页里的 HTML、CSS、JS、JSON 都是文本,重复字符多,直接传输体积大。Gzip 在服务器端把响应压缩成更小的数据包,浏览器收到后自动解压,文本资源通常能压缩到原来的 20%~40%,减少带宽占用、加快首屏加载。图片、压缩包本身已压缩,不需要再 Gzip。
二、基础配置
在 nginx.conf 的 http 块开启:
gzip on;
gzip_min_length 1k; # 小于1KB不压缩,避免小文件得不偿失
gzip_comp_level 6; # 压缩等级1~9,6性价比最高
gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
gzip_vary on; # 响应头加 Vary: Accept-Encoding,区分是否支持压缩
gzip on 总开关;gzip_types 指定要压缩的 MIME 类型,默认只压 text/html,JS、CSS、JSON 必须手动加上。
三、关键参数说明
gzip_min_length:只压缩超过该大小的响应,过小文件压缩收益低于 CPU 消耗;gzip_comp_level:等级越高压缩率越大但 CPU 越高,生产用 5~6,不要盲目拉满;gzip_buffers:压缩缓冲区大小,默认即可;gzip_vary on:告诉 CDN 和代理按 Accept-Encoding 分别缓存,避免给不支持压缩的客户端发压缩内容。
四、静态资源与 Brotli
对已经预压缩的文件(如 .gz 版本)可直接用 gzip_static on,跳过实时压缩,减少 CPU:
gzip_static on;
现代浏览器还支持 Brotli,压缩率比 Gzip 更高,Nginx 需额外模块,生产可作为增强,Gzip 保证兼容性。
五、验证是否生效
浏览器 F12 Network 看响应头:
Content-Encoding: gzip
存在该头且资源体积明显变小即生效。也可用 curl:
curl -I -H "Accept-Encoding: gzip" https://example.com/app.js
六、常见误区
- 只开 gzip on 不配 gzip_types,JS、CSS 没被压缩;
- 压缩等级拉到 9,CPU 飙升收益却很小;
- 对 PNG、JPG、视频、zip 也压缩,纯属浪费;
- 忘记 gzip_vary,代理缓存把压缩版发给不支持的浏览器;
- 小文件也压,增加计算开销反而变慢。
七、总结
Gzip 配置核心是开关、阈值、等级、类型四件套:开总开关、设最小长度、选 6 级、补齐文本类型并加 Vary。配合 gzip_static 预压缩和 Brotli 增强,用少量 CPU 换取大幅带宽节省,是 Nginx 站点提速的基础优化项。