Apache启用mod_brotli需满足三重条件:1.版本≥2.4.26并升级;2.系统适配安装模块(Ubuntu用apt,CentOS需编译);3.配置BrotliCompressionQuality、WindowSize及AddOutputFilterByType MIME类型,并验证响应头含Content-Encoding: br。
apache 启用 mod_brotli 能显著提升文本类资源(html/css/js/svg)的压缩率,相比 gzip 通常再减少 15%–30% 体积,但需满足版本、模块和配置三重条件——它不是简单开关,而是需要明确启用、精细调参并验证生效的完整流程。
确认 Apache 版本与系统兼容性
mod_brotli 仅支持 Apache 2.4.26 及以上版本。低于此版本无法使用,必须先升级:
- Ubuntu/Debian:运行
apache2 -v查看当前版本;若不足,执行sudo apt update && sudo apt upgrade apache2 - CentOS/RHEL:
httpd -v检查版本;官方源常滞后,建议从 Apache 官方 tar.gz 源码编译安装(如 2.4.62),可精准控制模块与优化选项 - 升级后务必重启 Apache,并用
httpd -M | grep brotli或apache2ctl -M | grep brotli确认模块未加载(此时应无输出,因尚未安装)
安装并启用 mod_brotli 模块
不同系统安装路径差异较大,关键在于让模块被 Apache 正确识别并加载:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- Ubuntu/Debian:直接安装预编译包
sudo apt-get install libapache2-mod-brotlisudo a2enmod brotlisudo systemctl restart apache2 - CentOS/RHEL:需手动编译 Brotli 库与 Apache 模块
先装依赖:yum groupinstall "Development Tools" cmake
再编译 Brotli:git clone https://github.com/google/brotli && cd brotli && mkdir out && cd out && cmake .. && make && sudo make install
最后编译并安装 mod_brotli(需 Apache 源码或 apxs 工具) - 启用后检查:
httpd -M | grep brotli应显示brotli_module (shared),否则配置无效
配置 Brotli 压缩策略与 MIME 类型
仅启用模块不够,必须显式指定压缩范围、质量与响应头,否则浏览器收不到 Content-Encoding: br:
- 在虚拟主机或主配置中添加以下核心配置块:
<IfModule mod_brotli.c><br> BrotliCompressionQuality 11<br> BrotliWindowSize 22<br> AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/javascript application/json application/xml application/xhtml+xml application/rss+xml application/atom+xml image/svg+xml<br></IfModule>
-
BrotliCompressionQuality 11是最高质量,适合静态资源;动态内容可设为 4–6 平衡 CPU 与体积 -
AddOutputFilterByType必须覆盖所有目标类型,漏掉application/javascript就会导致 JS 不压缩 - 避免与
mod_deflate冲突:若同时启用了 Gzip,建议禁用其对相同 MIME 类型的规则,防止双重压缩或优先级混乱
验证 Brotli 是否真实生效
生效与否不能只看配置是否写对,必须通过真实请求响应头确认:
- 用 Chrome DevTools 打开 Network 面板,刷新页面,点击任意 JS/CSS/HTML 请求
- 检查 Response Headers 中是否存在
Content-Encoding: br,且Vary: Accept-Encoding存在 - 对比同资源的未压缩大小(Response 标签页右上角 Size 列):若显示 “br” 字样且体积明显小于 gzip 版本,说明成功
- 注意排除干扰:PHP 输出层若开启
zlib.output_compression,会覆盖 Apache 的 Brotli,需关闭该 PHP 设置

















