location + alias 实现 URL 前缀到物理目录的精准替换:匹配段被完全移除,再拼接 alias 路径;需 location 和 alias 均以 / 结尾,否则路径拼接错误导致 404。

用 location 匹配 URL 路径,再配合 alias 指令,就能把某个访问前缀精准映射到服务器上任意物理目录——关键不是“挂在哪”,而是“怎么替”。
location + alias 的核心逻辑:前缀替换,不是拼接
alias 不是往路径后面加东西,而是把 location 匹配到的那一段 URL 完全去掉,再把指定目录“接上去”。所以:
- location 必须以
/结尾(比如/admin/),否则 Nginx 可能只截掉部分路径,导致文件找错位置 - alias 值也建议以
/结尾(比如/var/www/admin/),这样剩余 URI(如js/app.js)才能自然拼在后面 - 请求
/admin/js/app.js→ 去掉/admin/→ 剩下js/app.js→ 拼到/var/www/admin/后 → 实际读取/var/www/admin/js/app.js
常见配置写法与典型场景
不同用途对应不同写法,选错容易 404:
-
挂载独立 SPA(如 Vue/React 管理后台):
location /admin/ { alias /var/www/admin/; try_files $uri $uri/ /admin/index.html; }
注意:Vue 项目需设publicPath: "/admin/",否则 JS/CSS 路径会错位 -
映射公共资源目录(图标、字体等):
location /assets/icons/ { alias /mnt/shared/assets/icons/; }
多个子应用可共用这一段,不用重复打包 -
多级 API 文档静态页(如 Swagger UI):
location /api/v1/docs/ { alias /opt/swagger-ui/; try_files $uri $uri/ /index.html; }
正则 location 动态映射(按路径变量跳转)
想根据 URL 中的项目名、版本号自动路由,就得用正则捕获 + alias 引用变量:
- 正确写法(Nginx ≥ 1.11.2):
location ~ ^/projects/(?[^/]+)/(.*)$ { alias /data/projects/$proj/$2; } - 兼容旧版写法(更稳妥):
location ~ ^/projects/([^/]+)/(.*)$ { root /data/projects; try_files $1/$2 =404; } - 切忌:
location ~ /projects/ { alias /data/projects/; }——正则没捕获、没限定边界,$1为空,映射就失效
容易踩坑的细节提醒
很多 404 或权限错误其实源于几个小疏忽:
- alias 值末尾少斜杠,或 location 少斜杠,会导致路径拼接错位(比如变成
/var/www/adminjs/app.js) - rewrite 在 location 外提前重写了 URI,可能让原本该命中 alias 的请求跑去了别的 location
- 目标目录权限不对,或 SELinux 开启时未放行,Nginx 读不到文件——检查 error.log 里有没有 “Permission denied”
- 调试时加一行:
error_log /var/log/nginx/error.log debug;,看日志里 “using configuration” 和 “open()” 行,确认最终读取的是哪个路径











