gzip压缩优化
gzip 压缩可显著减少传输数据量(通常减少 60%-80%)。合理配置能在可接受的 CPU 消耗下大幅提升加载速度。
基础配置
开启 gzip
nginx
http {
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types
text/plain
text/css
application/json
application/javascript
text/xml
application/xml
application/xml+rss
text/javascript
image/svg+xml;
}
gzip_comp_level范围 1-9,推荐 4-6。级别再高压缩率提升有限但 CPU 消耗急剧增加。
核心指令说明
关键参数
gzip on— 启用 gzip 压缩gzip_vary on— 添加Vary: Accept-Encoding头,告知代理按编码缓存gzip_proxied any— 对代理请求也启用压缩gzip_comp_level— 压缩级别,1最快/最小,9最慢/最大gzip_min_length— 小于此大小的响应不压缩(字节)gzip_types— 需要压缩的 MIME 类型
压缩级别选择
性能与压缩率平衡
nginx
# 高流量站点 - 低压缩级别
gzip_comp_level 3;
# 一般站点 - 平衡
gzip_comp_level 5;
# 带宽受限 - 高压缩级别
gzip_comp_level 7;
测试数据:从 level 1 到 level 6 压缩率提升明显,level 6 到 9 仅提升 1%-2% 但 CPU 翻倍。
不压缩的内容
排除已压缩文件
nginx
# gzip 不会自动压缩以下类型(无需额外配置)
# image/jpeg, image/png, image/gif - 已经压缩过的图片
# video/mp4, application/pdf - 已压缩格式
# application/octet-stream - 二进制文件
图片、视频、PDF 等已经是压缩格式,再次 gzip 压缩几乎无效且浪费 CPU。
brotli 替代方案
更高效的压缩算法
nginx
# 需要编译 brotli 模块
http {
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
# 同时保留 gzip 兼容旧浏览器
gzip on;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript;
}
brotli 压缩率比 gzip 高 15%-25%,但仅支持 HTTPS 和现代浏览器。建议 gzip + brotli 共存。
动态压缩控制
按路径关闭压缩
nginx
# API 返回小 JSON 不需要压缩
location /api/health {
gzip off;
}
# 大文件下载不需要压缩
location /downloads/ {
gzip off;
}
小响应体(< 256 字节)压缩后减少的收益不足以抵消 CPU 开销。
要点总结
gzip_comp_level 4-6是性价比最高的压缩级别- 务必设置
gzip_vary on让代理正确缓存 gzip_min_length避免对小文件浪费 CPU- 已压缩格式(图片、视频、PDF)无需再次压缩
- brotli 压缩率更高但需 HTTPS 支持,可与 gzip 共存
- API 健康检查、小 JSON 等可关闭压缩
📝 发现内容有误?点击此处直接编辑