sub_filter指令可在Nginx代理层对HTML响应体实时字符串替换,实现零侵入前端增强;需显式启用、指定MIME类型、禁用gzip、注意编码与大小写,并规避script内替换等风险。

sub_filter 指令可在 Nginx 代理层对上游响应的 HTML 内容做实时、轻量的字符串替换,无需改动后端代码即可注入脚本、样式或元信息,是实现零侵入前端增强的常用手段。但需注意它仅工作于响应体(body),且默认不支持正则、不处理压缩内容。
启用 sub_filter 的基本配置
sub_filter 默认不生效,必须显式开启 sub_filter_once off(允许多次替换)或 on(仅替换首次匹配),并配合 sub_filter_types 指定 MIME 类型(默认只处理 text/html):
- 若需处理 JSON 或自定义模板,添加 sub_filter_types application/json text/plain;
- 确保响应未被 gzip 压缩——Nginx 不会对已压缩响应解压再替换,建议在 upstream 关闭 gzip,或用 gzip_disable "msie6"; 避免对特定客户端压缩
- sub_filter 对大小写敏感,如需忽略大小写,需升级至 Nginx Plus 或改用第三方模块(如 headers-more + lua-resty-string)
安全注入 JS/CSS 而不破坏 HTML 结构
直接替换 或










