root是拼接,将整个URI追加到指定目录;alias是替换,剥离location前缀后拼接剩余URI。root要求磁盘路径与URL结构一致,alias则无视前缀、灵活映射子路径。

Nginx 中 root 和 alias 都能映射 URL 到文件系统路径,但逻辑完全不同——用错一个符号、少一个斜杠,就可能返回 404 或加载错文件。
root 是“拼接”,适合整站或层级一致的静态部署
root 把整个请求 URI(包括 location 前缀)直接追加到指定目录后面。它要求磁盘上存在与 URL 完全对应的子路径。
比如:
location /admin/ {
root /var/www/html;
}访问 /admin/js/app.js,Nginx 实际查找的是:/var/www/html/admin/js/app.js
✅ 正确写法要点:
-
root后面可加/也可不加(Nginx 自动处理),但建议统一写成/var/www/html/,避免歧义 -
location最好以/结尾(如/admin/),否则/admin和/admin/xxx可能匹配异常 - 适用于 Vue/React 构建产物整个
dist目录作为站点根目录部署(如location / { root /var/www/web; }) - 若
/var/www/html/admin/这个目录在磁盘里不存在,就会 404 ——root不跳过前缀,它严格依赖真实路径结构
alias 是“替换”,适合子路径挂载或路径剥离场景
alias 会把 location 匹配的部分完全去掉,只把剩余 URI 拼到目标路径后。它不关心磁盘中是否存在对应前缀目录。
比如:
location /admin/ {
alias /var/www/admin/;
}访问 /admin/js/app.js,Nginx 实际查找的是:/var/www/admin/js/app.js(/admin/ 被彻底剥离)
✅ 正确写法要点:
-
alias值必须以/结尾(除非指向单个文件,如alias /etc/passwd;) -
location也建议以/结尾,保证语义对齐;若写成/admin,则/admin/xxx可能不匹配 - 典型用途:Vue 子应用挂载在
/admin/、Swagger UI 挂在/api/v1/docs/、公共资源统一映射(如/assets/icons/ → /mnt/shared/icons/) - 使用
try_files时注意 fallback 路径要带 location 前缀,例如:try_files $uri $uri/ /admin/index.html;(不能写成/index.html)
别混用,也别在正则 location 里乱用 alias
- 同一个
location块内,root和alias互斥,Nginx 启动会直接报错 -
alias只能在location块中使用;root还可在http、server级别设置 - Nginx 1.11.5+ 支持在正则
location中配合命名捕获使用alias,例如:location ~ ^/static/(?<type>css|js)/(.*)$ { alias /data/assets/$type/$2; }但生产环境慎用,稳定性不如普通前缀匹配
怎么选?看 URL 是否该出现在文件路径里
- 如果 URL 路径本身就应该反映磁盘结构(比如
/images/logo.png对应/var/www/images/logo.png)→ 用root - 如果只是把某个 URL 前缀“映射到”独立目录(比如
/blog/实际指向/opt/blog-app/,不希望磁盘里真有/opt/blog-app/blog/)→ 用alias
不复杂但容易忽略。


















