要使 sub_filter 仅对 CSS 和 JS 文件生效,必须显式设置 sub_filter_types text/css application/javascript;默认只处理 text/html,且需确保后端返回对应 Content-Type,否则需在 Nginx 中强制添加 add_header。

想让 sub_filter 只对 CSS 和 JS 文件生效,关键不是“排除 HTML”,而是**显式声明只处理这两类 MIME 类型**。默认情况下它只处理 text/html,不碰其他类型,所以必须靠 sub_filter_types 精准放行。
明确指定 MIME 类型
直接写:
sub_filter_types text/css application/javascript;- 不要用
*—— 它会匹配所有类型,包括你不想动的 JSON、SVG、甚至二进制响应,容易出错 - 注意拼写准确:
application/javascript是标准写法(不是text/javascript,后者已过时)
确保后端实际返回对应 Content-Type
如果 JS 文件返回的是 text/plain 或没设头,sub_filter 就不会触发。验证方法:
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
- 用
curl -I https://your-domain/static/app.js查看响应头中的Content-Type - 若不匹配,需在后端修复,或在 Nginx 中用
add_header Content-Type application/javascript;强制覆盖(仅限静态文件场景)
配合 proxy_pass 使用的典型配置
例如把内网 JS 路径统一替换为 CDN 前缀:
location /static/ {proxy_pass http://backend-server/;sub_filter '/static/' 'https://cdn.example.com/static/';sub_filter_once off;sub_filter_types text/css application/javascript;}
常见误配与规避
这些情况会导致替换失效:
- 启用了
gzip on:压缩后的响应体无法被sub_filter解析,必须加gzip off;或至少gzip_vary off; - 后端使用
Transfer-Encoding: chunked且无Content-Length:建议开启proxy_buffering on;并调大proxy_buffer_size - 路径中含空格或大小写混用:比如
src="/js/main.js"和src = "/js/main.js"是两个不同字符串,需分别写规则或统一后端输出格式
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










