Apache响应体正则脱敏唯一可行模块是mod_substitute,需启用substitute和filter模块,精准声明MIME类型如AddOutputFilterByType SUBSTITUTE application/json,并在LocationMatch中限定路径、禁用gzip、正确书写转义正则规则。

Apache 层对响应体做正则脱敏,唯一可行模块是 mod_substitute。它专为修改 HTTP 响应正文设计,而 mod_headers 只能改响应头,mod_proxy 不处理响应体内容。
必须启用并配置依赖模块
确保以下模块已启用:
-
a2enmod substitute filter(mod_substitute依赖mod_filter才能挂载到输出链) -
mod_charset_lite在 2.4.12+ 已废弃,无需启用;若误启可能干扰 MIME 判断 - 确认 Apache 配置中未禁用
FilterDeclare或覆盖默认过滤器链
精准声明 MIME 类型才能生效
Apache 默认只对明确匹配的 Content-Type 应用 Substitute。后端返回 application/json; charset=utf-8 时,需用以下方式匹配:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
AddOutputFilterByType SUBSTITUTE application/json(忽略charset参数) - 若需同时处理 HTML 和 JSON:
AddOutputFilterByType SUBSTITUTE text/html application/json - 不建议用
text/*宽泛匹配,易误伤非目标响应(如 CSS/JS)
写对 Substitute 规则的关键细节
规则格式为 Substitute "s/pattern/replacement/[flags]",注意:
- 双引号必须转义:身份证字段
"idCard":"11010119900307251X"→ 正则中写成\"idCard\":\"[0-9]{17}[0-9X]\" - 避免使用
\d,Apache 正则不支持,统一用[0-9] - 含斜杠的字段(如
"phone":"/138****1234/")换用#作分隔符:s#"phone":"[0-9]{11}"#"phone":"****1234"#g - 加
i标志提升容错(如大小写混用),加g全局替换
限定业务路径并规避常见陷阱
用 LocationMatch 精确控制作用范围,例如只处理用户详情接口:
-
<locationmatch></locationmatch>比<location></location>更安全 - 响应若被 gzip 压缩,
mod_substitute无法处理,需提前禁用:SetEnv no-gzip 1 - 启用调试日志:
LogLevel alert substitute:trace6,查看是否命中过滤链和替换是否执行

















