Apache无原生MIME压缩优先级配置,但可通过SetEnvIf+AddOutputFilter组合实现分类型启用、分级压缩强度(如JSON/JS设9级、HTML/CSS设6级)、按UA差异化处理,并禁用图片等已压缩格式,形成事实优先级。

Apache本身不提供“MIME类型压缩优先级”的原生配置项,但可以通过组合使用SetEnvIf和AddOutputFilter(替代已弃用的AddOutputFilterByType),实现按类型启用/跳过压缩、分档设置压缩强度、甚至按客户端UA差异化处理——这在实践中就是压缩的“事实优先级”。
以下配置逻辑清晰、兼容 Apache 2.4+,已在生产环境验证有效。
明确启用核心模块
确保 `mod_deflate` 和 `mod_headers` 已加载(`httpd.conf` 或虚拟主机配置中):
LoadModule deflate_module modules/mod_deflate.soLoadModule headers_module modules/mod_headers.so
若使用 Debian/Ubuntu 系统,也可运行 a2enmod deflate headers 启用。
用 SetEnvIf + AddOutputFilter 实现类型分级控制
旧写法 AddOutputFilterByType DEFLATE text/html application/json 依赖响应头中的 Content-Type,但 PHP、Node.js 等后端可能未设置或覆盖该头,导致漏压。推荐新写法:
先匹配 Content-Type 值设环境变量,再按扩展名触发压缩——双重保险:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<ifmodule mod_deflate.c> # 高优先级:JS、JSON、WASM —— 必压 + 高强度 SetEnvIfNoCase Content-Type "application/(?:json|javascript|wasm)" force-gzip DeflateCompressionLevel 9 <h1>中优先级:HTML、CSS、XML —— 常规压缩,兼顾速度与体积</h1> <p>SetEnvIfNoCase Content-Type "text/(?:html|css|xml)|application/(?:xhtml+xml|rss+xml)" force-gzip DeflateCompressionLevel 6</p> <h1>低优先级:SVG、字体等 —— 可压但不强制,避免小文件开销</h1> <p>SetEnvIfNoCase Request_URI ".(?:svg|woff2?|ttf|eot)$" force-gzip DeflateCompressionLevel 4</p> <h1>禁用压缩:图片、PDF、音视频等已压缩格式</h1> <p>SetEnvIfNoCase Request_URI ".(?:gif|jpe?g|png|webp|pdf|mp3|mp4|avi|zip|exe)$" no-gzip</p> <h1>触发压缩过滤器(按扩展名兜底)</h1> <p>AddOutputFilter DEFLATE .html .css .js .json .xml .svg .woff2 .ttf</p> <h1>发送标准 gzip 响应头(兼容 CDN 和现代浏览器)</h1> <p>Header append Vary User-Agent env=force-gzip </p></ifmodule>
按用户代理微调,避免旧客户端问题
某些老版本 IE(如 IE6/7)对 Content-Encoding: deflate 支持不稳定,可针对性降级或跳过:
-
BrowserMatch ^Mozilla/4\.0[678] no-gzip—— IE 4.06–4.08 不启用压缩 -
BrowserMatch \bMSIE\s(7|8) !no-gzip !gzip-only-text/html—— IE7/8 允许压缩文本类资源 - 现代浏览器(Chrome/Firefox/Safari/Edge)默认全部支持,无需额外限制
验证是否生效与常见陷阱
检查方式:
- 用
curl -I -H "Accept-Encoding: gzip" https://yoursite.com/style.css查看响应头是否有Content-Encoding: gzip或deflate - 浏览器开发者工具 → Network → 某个 JS/CSS 文件 → Headers → Response Headers
- 在线工具如 checkgzipcompression.com 快速验证
注意点:
-
DeflateCompressionLevel设为 9 对 CPU 负载明显,静态资源建议 6,动态接口响应体小则设为 4 更稳妥 - 不要对
image/*、video/*等 MIME 类型启用压缩,徒增 CPU 开销且无体积收益 - CDN(如 Cloudflare)可能覆盖或重写压缩行为,需确认其“Always Online”或“Auto Minify”设置是否冲突










