alias本质是路径前缀替换而非拼接,location与alias末尾斜杠必须严格对应:location /static/需配alias /data/assets/;配错则404或路径粘连;多location可独立映射跨目录资源。
Nginx 的 `alias` 指令本质是“路径前缀替换”,不是拼接,配对的关键在于 **location 匹配段和 alias 值的斜杠一致性**,以及明确被替换的部分。配错一个斜杠,就容易 404 或读到错误文件。这是最常踩坑的地方。规则很简单:
location /static/ { ... }),那么 alias 值也必须以 / 结尾(如 alias /var/www/dist/static/;)location /api),那它匹配的是精确路径,alias 可指向具体文件(如 alias /var/www/maintenance.html;),但一般不推荐用于目录映射location /static/ { alias /var/www/dist/static; }(缺末尾 /)→ 请求 /static/js/app.js 会去找 /var/www/dist/staticjs/app.js(中间少了个 /)请求 URI 是 /static/css/main.css,配置如下:
location /static/ {alias /data/assets/;}
Nginx 执行过程:
/static/,把它从 URI 中完整去掉 → 剩下 css/main.css
/data/assets/ 后面 → 最终路径是 /data/assets/css/main.css
对比 root:同样 location /static/ + root /data/assets; → 实际找的是 /data/assets/static/css/main.css(多了 static 一级)
比如 Vue 项目部署在 /admin/ 下,构建时设了 publicPath: "/admin/",静态资源实际放在 /var/www/admin/dist/:
location /admin/ {alias /var/www/admin/dist/;index index.html;try_files $request_filename $request_filename/ /admin/index.html;}
location /admin/ 匹配所有以 /admin/ 开头的请求alias 把 /admin/ 替换成 /var/www/admin/dist/
try_files $request_filename 是关键——它用的是 Nginx 已根据 alias 解析出的真实文件路径,不会绕回 root 去找alias 只能在 location 块里用,且不适合全局匹配:
location / { alias /var/www/html/; } 是危险且无效的写法 —— 它会导致根路径下所有请求都被替换,连 /favicon.ico 都可能找不到root;只映射某一段路径(如 /assets/、/docs/、/upload/)才用 alias
location + alias,互不干扰,例如:/app1/ → /var/www/app1/dist/,/app2/ → /var/www/app2/dist/