主站用root保持简洁,子项目或跨目录资源用alias精准映射;root拼接完整URI,要求磁盘存在对应子目录,alias替换location前缀,末尾必须加/,二者不可混用于同一location。

用 root 和 alias 实现多项目静态资源共存,关键不是“堆配置”,而是按 URL 路径层级和磁盘目录结构做合理分工:主站用 root 保持简洁,子项目或跨目录资源用 alias 精准映射,互不干扰。
主站用 root,子路径用 alias
适合一个主项目(如官网) + 多个独立子应用(如后台、文档、Swagger)的场景。主站通常部署在根路径 /,子应用挂载在带前缀的路径下(如 /admin/、/docs/)。
-
location / { root /var/www/web; }→ 请求/index.html对应/var/www/web/index.html -
location /admin/ { alias /var/www/admin/; }→/admin/js/app.js映射到/var/www/admin/js/app.js(注意alias值末尾必须有/) -
location /docs/ { alias /var/www/docs/v2/; }→ 把 v2 版文档直接挂到/docs/,无需挪动文件
公共资源统一挂载,避免重复存放
多个项目共用图标、字体、配置等静态资源时,用 alias 单独挂载一个共享目录,所有项目通过相同 URL 访问,物理路径却来自同一位置。
-
location /assets/icons/ { alias /mnt/shared/icons/; }→ 所有项目请求/assets/icons/logo.svg都读取/mnt/shared/icons/logo.svg -
location /assets/fonts/ { alias /mnt/shared/fonts/; }→ 字体文件集中管理,更新一次全站生效 - 确保 Nginx 对
/mnt/shared/有读权限,尤其跨挂载点时检查 SELinux 或 mount 选项
多版本共存:root 按目录分版,alias 映射默认版
当不同版本(v1、v2、v3)各自独立部署,又希望 / 默认指向最新版时,root 和 alias 可配合使用。
-
location /v1/ { root /var/www/api-docs; }→/v1/index.html→/var/www/api-docs/v1/index.html -
location /v2/ { root /var/www/api-docs; }→ 同理,结构一致,维护简单 -
location / { alias /var/www/api-docs/v2/; }→/index.html直接服务 v2 内容,不改变磁盘路径
避坑要点:写法决定成败
看似微小的符号差异,往往导致 404 或文件错位:
-
alias的路径值末尾必须加/,否则alias /var/www/admin+ 请求/admin/js/app.js会拼成/var/www/adminjs/app.js -
location末尾斜杠要与alias语义对齐:location /admin/配alias /var/www/admin/;若写成location /admin(无尾斜杠),匹配行为可能意外截断 - 同一级
location块内不能混用root和alias,Nginx 会报错退出 - 用
try_files支持 Vue/React history 模式时,fallback 路径必须带 location 前缀,例如try_files $uri $uri/ /admin/index.html;











