全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 7 分钟 ✍️ juanwangdev

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 等可关闭压缩

📝 发现内容有误?点击此处直接编辑

← 上一篇 SSL/TLS性能优化
下一篇 → sendfile零拷贝
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库