不建议对图片和视频开启 Gzip 压缩,因为它们本身已是高度压缩的二进制格式,Gzip 再压几乎不减小体积,反而可能增大文件、浪费服务器 CPU、拖慢响应速度。

不建议对图片和视频开启 Gzip 压缩,核心原因就一个:它们本身已是高度压缩的二进制格式,Gzip 再压不仅几乎不减小体积,反而可能增大文件、浪费服务器 CPU、拖慢响应速度。
为什么图片/视频不适合 Gzip 压缩
主流图片(JPEG、PNG、WebP、GIF)和视频(MP4、AVI、MOV)在生成时已内置专用压缩算法:
- JPEG 使用离散余弦变换(DCT)+ Huffman 编码,本质已是“有损+熵编码”双重压缩;
- PNG 使用 DEFLATE 算法(和 Gzip 同源),相当于已经跑过一遍 Gzip 的底层逻辑;
- WebP、AV1、HEVC 等现代格式压缩率更高,冗余信息极少,Gzip 几乎找不到可压缩模式。
实测常见情况:一个 280KB 的 PNG 图片,开启 Gzip 后可能变成 282KB——多出的字节数来自 Gzip 文件头、校验块和压缩字典开销。
gzip_types 配置的关键原则
gzip_types 是 Nginx 中指定哪些 MIME 类型启用压缩的指令。正确配置能避免误压图片/视频:
- 只显式列出需压缩的文本类资源,例如:
gzip_types text/plain text/css text/xml application/javascript application/json application/xml+rss application/xhtml+xml; - 坚决不要包含
image/*、video/*、audio/*或具体类型如image/png; - 注意 SVG 是例外:SVG 是 XML 格式的纯文本,可以且推荐压缩,应加入
image/svg+xml; - 字体文件(
font/woff2、application/font-woff)也已压缩,无需 Gzip。
误配 gzip_types 的实际影响
如果错误地把 image/jpeg 加入 gzip_types,会发生:
- 每次请求 JPG 图片,Nginx 都要调用 CPU 执行一次无意义的压缩计算;
- 高并发下 CPU 使用率异常升高,影响其他请求处理;
- 响应头中出现
Content-Encoding: gzip,但浏览器解压后内容不变,白费一次解码; - CDN 或代理层可能因 Content-Encoding 不匹配导致缓存失效或响应异常。
替代方案:真正有效的图片/视频优化
与其徒劳 Gzip,不如做这些事:
- 用现代格式替代:JPEG → WebP/AVIF,PNG → WebP(支持透明),体积常降 30%~70%;
- 按场景调整质量参数:工具如
cwebp、ffmpeg可控画质与体积平衡; - 启用响应式图片:
<picture></picture>+srcset,让设备只下载适配尺寸; - 设置长效缓存:图片加
Cache-Control: public, max-age=31536000,靠客户端缓存省带宽。

















