通过map+location+alias组合可实现多版本静态资源安全共存:map动态映射环境路径,alias精准匹配版本前缀,符号链接支持零停机更新。

直接用 root 指令无法让不同版本静态资源“自动切换”,但通过 map + location + alias 的组合,可以安全、清晰地实现多版本共存,且互不干扰。
用 map 动态映射环境路径
在 http 块中定义请求特征到文件路径的映射,避免硬编码或 if 判断:
- 按域名区分:比如
dev.example.com → /var/www/app/dev/,prod.example.com → /var/www/app/prod/ - 按请求头区分:如
X-Env: staging映射到/var/www/app/staging/ - 所有分支必须覆盖,否则未匹配时变量为空,导致 404;路径需是合法绝对路径
用 alias 处理带版本前缀的请求
对含版本号的路径(如 /v1/assets/),必须用 alias,不能用 root:
-
location ^~ /v1/assets/ { alias $env_root/v1/assets/; }→ 请求/v1/assets/logo.png直接落到磁盘路径$env_root/v1/assets/logo.png - 若误用
root:root $env_root;+location /v1/assets/会导致路径拼成$env_root/v1/assets/v1/assets/logo.png,明显错误 -
^~前缀确保最长前缀匹配优先于正则,适合版本路由
分层 location 控制匹配顺序
把高优先级的版本路径放在前面,利用 Nginx 匹配规则自然分流:
-
location ^~ /v2/ { alias $env_root/v2/; }→ 所有/v2/xxx请求走 v2 -
location ^~ /v1/ { alias $env_root/v1/; }→ 次之 -
location / { root $env_root/latest/; }→ 默认兜底,指向符号链接或当前稳定版目录
用符号链接实现零停机更新
让 $env_root/latest 或各版本路径实际指向具体发布目录:
/var/www/app/latest → /var/www/app/releases/20260605/- 上线新版时只改软链目标,Nginx 不 reload 即可生效
- 构建脚本可自动创建新目录、更新软链、清理旧版本











