Nginx 需通过 location ~*\.js\.map$ 匹配 source map 请求,推荐用 alias /var/www/myapp/sourcemaps/(末尾带斜杠)映射,或用 rewrite + root 实现路径重写,并验证文件权限、响应头及配置重载。

想让 Nginx 把某个 JS 文件(比如 /js/app.js.map)映射到实际存放位置(如 /sourcemaps/app.js.map),关键不是“映射 JS 文件”,而是正确配置 location 块匹配 `.map` 后缀,并用 alias 或 rewrite + root 指向真实路径。
匹配 .map 文件的 location 规则
`.map` 是 source map 文件,浏览器在调试时自动请求,路径通常和 JS 文件同名但后缀不同。Nginx 需单独捕获这类请求:
- 用精确匹配:
location = /js/app.js.map { ... }—— 仅适用于单个固定文件 - 用后缀匹配:
location ~* \.js\.map$ { ... }—— 推荐,能覆盖所有 JS source map - 避免用
location /js/这类前缀匹配,它会干扰正常 JS 文件服务,且无法精准控制 .map 行为
用 alias 安全映射到源码目录
alias 更适合把 URL 路径“替换”为磁盘路径,注意末尾斜杠和路径拼接规则:
location ~* \.js\.map$ {
alias /var/www/myapp/sourcemaps/;
# 注意:alias 后必须带结尾 /,且不包含匹配路径部分
# 请求 /js/app.js.map → 实际读取 /var/www/myapp/sourcemaps/app.js.map
add_header Content-Type application/json;
expires 1h;
}
⚠️ 如果写成 alias /var/www/myapp/sourcemaps(缺斜杠),Nginx 会拼错路径,导致 404。
用 rewrite + root 实现灵活重写
当 source map 和 JS 不在同一层级,或需统一重写规则时,可用 rewrite 提取文件名再交由 root 定位:
location ~* ^/js/(.+\.js\.map)$ {
rewrite ^/js/(.+\.js\.map)$ /sourcemaps/$1 break;
root /var/www/myapp;
# 请求 /js/app.js.map → 重写为 /sourcemaps/app.js.map → 实际读取 /var/www/myapp/sourcemaps/app.js.map
}
这种方式更清晰体现“路径转换逻辑”,也便于后续扩展(比如加版本前缀、哈希目录等)。
验证与调试要点
- 确保 source map 文件真实存在且 Nginx 有读取权限(
ls -l /var/www/myapp/sourcemaps/) - 打开浏览器开发者工具 → Sources → 点开 JS 文件 → 查看右下角是否显示 “source map detected” 并可跳转源码
- 用
curl -I http://yoursite/js/app.js.map检查返回状态码和Content-Type - Nginx 配置修改后务必
nginx -t && nginx -s reload,否则不生效










