sub_filter_once off 是全局替换的前提,因默认 sub_filter_once on 仅替换首个匹配项;需配合 sub_filter_types 指定类型、禁用 gzip 或启用 gunzip、确保 content-type 正确且响应未超 buffer 限制。

为什么 sub_filter_once off 是全局注入的前提
因为 Nginx 默认只对响应体做一次子串替换(sub_filter_once on),遇到第一个匹配就停止。如果页面里有多个 或多个 ,或者你想在多个位置插入不同内容(比如关键词 + 监控脚本),必须关掉这个限制,否则只有第一个位置生效。
关键点在于:sub_filter_once off 不是“开启多次替换”,而是“允许连续匹配并替换所有符合规则的片段”——它依赖正则锚点和上下文边界来准确定位插入点。
- 必须配合
sub_filter的正则模式使用(sub_filter_types *+sub_filter带~或~*) - 响应体必须是文本类型(
text/html、application/json等),二进制流(如图片、字体)会被跳过 - 若上游返回了
Content-Encoding: gzip,Nginx 不会解压再过滤,直接跳过 —— 必须确保后端关闭 gzip,或用gunzip on解压后再过滤
sub_filter 插入第三方监控脚本的写法要点
不能直接写 sub_filter "










