root是拼接、alias是替换:root将完整URI加在指定路径后,如location /static/ { root /var/www; }访问/static/css/app.css对应/var/www/static/css/app.css;alias则删除location匹配前缀后再拼接,如location /static/ { alias /var/www/assets/; }对应/var/www/assets/css/app.css。
关键在理解 root 是“拼接”,alias 是“替换”——选错一个,文件就找不到。
root 指令:原样拼接整个请求路径
root 把请求的完整 URI(包括 location 匹配到的部分)直接加在指定路径后面。它不删减、不截断,只是连接。
配置
,访问
,Nginx 实际查找:
也就是说,
这个前缀会出现在磁盘路径里,所以 root 后的目录通常不应再包含该子路径
适合整站托管或资源结构天然与 URL 层级一致的场景,比如
root 值末尾加不加
都能工作,但建议统一加,避免和 alias 混淆
alias 指令:精准替换 location 匹配部分
alias 会把 location 中写明的匹配前缀(如
)整个去掉,只把剩余路径拼到 alias 指定的目录后。
Nginx
在宝塔面板中轻松管理Nginx高性能Web服务器。提供可视化配置反向代理、负载均衡、SSL证书及HTTP缓存功能,一键优化高并发性能,助您高效搭建稳定、快速的网站运行环境。
下载
配置
,访问
,Nginx 实际查找:
alias 值**必须以
结尾**(指向目录时),否则可能因路径拼接出错;location 的末尾斜杠也要与之风格一致
不能用于正则 location(除非用命名捕获并显式引用,需谨慎)
适合子应用部署、CDN 回源、前端路由 fallback 等需要“抹掉 URL 前缀”的场景
怎么选?看 URL 是否该出现在文件路径里
判断逻辑很直接:
如果请求路径本身就应该对应磁盘上的子目录(比如
下真有 images 文件夹),用 root
如果只是把某个 URL 前缀“映射过去”,不希望它出现在物理路径中(比如
要指向独立构建的 Vue 项目目录),必须用 alias
Vue、React 等 SPA 非根部署时,99% 应该用 alias,否则资源路径会多套一层前缀导致 404
常见错误与排查建议
404 却确认文件存在?别猜,看日志:
检查 Nginx
,里面会明确写出它尝试访问的完整文件路径
误把
和
配在一起,结果去找
,而你本意是
——这时该换 alias
alias 值漏了末尾
,比如写成
,可能导致路径变成
(缺少分隔符)
root 和 alias 混用在同一 location 块中会报错,二者互斥
location /static/ { root /var/www; }/static/css/app.css/var/www/static/css/app.css/static/location / { root /var/www/html; }//static/location /static/ { alias /var/www/assets/; }/static/css/app.css/var/www/assets/css/app.css//images//admin/error.logroot /data;location /img { ... }/data/img/logo.png/data/logo.png/alias /var/www/assets/var/www/assetscss/app.css