sub_filter需在location块中配置并满足三要素:sub_filter_once off、sub_filter_types指定响应类型、确保响应未压缩;推荐用HTML边界精准匹配,避免误替换,且仅在必要location下启用。

直接在 location 块里用 sub_filter 指令就能实现页面文本动态替换,核心是让它精准作用于 HTML 响应体,同时避开压缩、缓冲和误替换陷阱。
基础替换必须配齐三要素
只写一条 sub_filter '旧文本' '新文本'; 是不够的。生效需同时满足:
-
开启全局替换:加
sub_filter_once off;,否则只改第一个匹配项 -
显式声明响应类型:用
sub_filter_types text/html;(默认只认text/html,JS/CSS/JSON 都要手动加) -
确保响应未压缩:后端若返回
Content-Encoding: gzip,Nginx 默认跳过替换;要么让后端禁用 gzip(加proxy_set_header Accept-Encoding "";),要么启用gunzip on;(需编译时带--with-http_gunzip_module)
提升准确性:用 HTML 边界框定替换范围
sub_filter 是纯字符串替换,不解析 HTML。裸替 /about 可能误伤 href="/about-us" 或 JS 字符串。推荐写法:
- 替链接:用
sub_filter 'href="/about"' 'href="/v2/about"'; - 替资源路径:用
sub_filter 'src="/static/' 'src="/cdn/'; - 注入脚本:用
sub_filter '


















