Nginx的sub_filter指令可对HTML等文本响应体实时字符串替换,需满足启用模块、匹配MIME类型、开启输出缓冲三前提;支持变量但不支持正则,默认仅替换首次,需sub_filter_once off启用全局替换。

Nginx 的 sub_filter 指令可以在不修改后端源码的前提下,对响应的 HTML 内容做实时、轻量级的字符串替换,常用于前端资源路径切换、环境标识注入、CDN 域名替换等场景。它工作在响应体(response body)阶段,仅对文本型内容(如 text/html、text/css)生效,且默认只处理第一个匹配项——需配合 sub_filter_once off 启用全局替换。
启用 sub_filter 的基本配置
要让 sub_filter 生效,必须满足三个前提:开启 sub_filter 模块(默认已编译进大多数发行版)、设置正确的 MIME 类型匹配、启用输出缓冲。典型配置如下:
- 使用
sub_filter定义查找与替换字符串,支持变量(如$host),但不支持正则表达式 - 添加
sub_filter_once off实现全文多次替换(默认为on,仅替换首次出现) - 确保响应头含
Content-Type: text/html,必要时用sub_filter_types显式扩展支持类型(如text/css application/javascript) - 后端响应不能启用 gzip(或需搭配
gunzip on解压后再过滤),否则原始 HTML 被压缩,sub_filter无法识别明文
常见实用场景与写法示例
无需改代码即可完成高频运维需求:
-
静态资源域名迁移:将
http://old.example.com/static/替换为https://cdn.example.com/,只需两行:sub_filter 'http://old.example.com/static/' 'https://cdn.example.com/';sub_filter_once off; -
注入环境标识:在页面底部插入调试提示,如
,可匹配[staging]
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











