Apache虚拟主机需停用mod_deflate并启用mod_brotli:先全局确认模块已加载,再在中用SetEnvIfNoCase禁用Deflate,通过AddOutputFilterByType指定text/html等类型启用Brotli压缩,配合BrotliCompressionQuality 6和BrotliWindowSize 19,并验证Content-Encoding: br及Vary头。

Apache 虚拟主机本身不“加载模块”,模块是全局启用的,但压缩行为可以按虚拟主机(或目录、位置)精细控制。想用 Brotli 替代 Deflate,核心不是“替换模块”,而是停用 mod_deflate 对该站点的压缩,启用 mod_brotli 并精确配置其作用范围。
确认全局模块已就位
先确保服务器级基础条件满足:
- Apache 版本 ≥ 2.4.26(运行
apache2 -v或httpd -v验证) -
mod_brotli已安装并启用(Ubuntu:执行sudo a2enmod brotli;CentOS:确认LoadModule brotli_module modules/mod_brotli.so在配置中且未注释) -
mod_deflate仍可保留(用于兜底或旧客户端兼容),但需在目标虚拟主机中显式禁用
在虚拟主机配置中关闭 Deflate、启用 Brotli
编辑对应站点的虚拟主机配置文件(如 /etc/apache2/sites-enabled/yoursite.conf),在 <virtualhost></virtualhost> 块内添加:
# 禁用 mod_deflate 对本虚拟主机生效
<IfModule deflate_module>
SetEnvIfNoCase Request_URI . no-gzip=1
</IfModule>
<h1>启用 mod_brotli,仅对文本类资源压缩</h1><p><IfModule brotli_module></p><h1>开启 Brotli 压缩</h1><pre class="brush:php;toolbar:false;">BrotliCompressionQuality 6
BrotliWindowSize 19
# 指定 MIME 类型(关键!避免压图片/字体)
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css text/javascript application/javascript application/json application/xml application/xhtml+xml
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
注意:AddOutputFilterByType 在较新 Apache 中虽被标记为过时,但在虚拟主机上下文中仍稳定可用;若追求严格合规,可用 <location></location> + SetOutputFilter BROTLI_COMPRESS 配合 mod_mime 的 AddType 确保类型识别准确。
避免常见冲突点
Brotli 生效容易被几个隐形因素干扰:
-
Content-Type 必须匹配:确保 HTML/CSS/JS 文件实际返回的
Content-Type是text/html等白名单类型(用curl -I yoursite.com/style.css检查) -
响应头不被覆盖:若前端有反向代理(如 Nginx、CDN),需确认它未清除
Content-Encoding: br或未强制回退到 gzip -
Vary 头要正确:Brotli 自动添加
Vary: Accept-Encoding,无需额外配置;但若同时提供 gzip 和 brotli,必须确保该头存在,否则缓存可能混用 -
浏览器支持判断:Brotli 仅被现代浏览器支持(Chrome ≥ 52、Firefox ≥ 44、Safari ≥ 11.1),Apache 不做 UA 判断——它只响应请求头中的
Accept-Encoding: br
验证是否真正生效
重启 Apache 后,用浏览器 DevTools 的 Network 标签页打开任意 HTML 或 JS 文件,检查响应头:
- 存在
Content-Encoding: br - 存在
Vary: Accept-Encoding -
Content-Length明显小于未压缩版本(对比禁用 Brotli 时)
命令行快速验证:curl -H "Accept-Encoding: br" -I https://yoursite.com/index.html,响应中应含 br 编码标识。

















