root是路径拼接,nginx将location匹配部分连同uri剩余路径拼接到root目录后;alias是路径替换,直接用alias值取代location匹配部分,且alias值必须以/结尾。

root 指令:路径拼接,别漏掉 location 后缀
用 root 时,Nginx 会把请求的完整 URI(包括 location 匹配到的部分)直接拼到你指定的目录后面。比如:
location /static/ {
root /var/www/html;
}
用户访问 /static/logo.png,Nginx 实际查找的是 /var/www/html/static/logo.png —— 注意中间多了一个 static/。
-
root值末尾加不加/都行,Nginx 自动处理 - 必须确保文件系统里真有
/var/www/html/static/这个子目录,否则 404 - 适合 URL 路径和磁盘目录结构严格对齐的场景,比如整站部署在
/var/www/html,子路径就是子目录 - 不能用于正则
location中的路径替换(会出错或行为不可控)
alias 指令:路径替换,末尾斜杠是硬性要求
alias 不是拼接,是“砍掉匹配的 location 前缀,换成你给的路径”。比如:
location /static/ {
alias /data/assets/;
}
用户访问 /static/logo.png,Nginx 查找的是 /data/assets/logo.png —— /static/ 被完全替换了。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
alias值**必须以/结尾**,写成alias /data/assets会导致 404 或返回错误文件 - 只允许出现在
location块内,server或http级别无效 - 如果
location用了正则(如location ~ ^/img/(.+\.png)$),alias必须引用捕获组,例如alias /data/pics/$1; - 适合把某个 URL 路径映射到完全无关的磁盘位置,比如 CDN 静态资源挂载、前端构建产物分离部署
常见 404 场景:root 和 alias 混用或路径结尾写错
最常踩的坑不是逻辑没想清,而是配置写法细节失效:
- 写
alias /data/images(缺末尾/)→ Nginx 尝试读取/data/imageslogo.png(连在一起),直接 404 - 写
root /data/images/但磁盘里只有/data/images/logo.png,却配了location /img/→ 实际查的是/data/images/img/logo.png,404 - 在
location /下误用alias:Nginx 不允许alias用于完全匹配根路径,会报错"alias" directive is not allowed here - 用
root指向一个软链接目录,而目标目录权限不对(如 nginx 用户无执行权)→ 日志里是Permission denied,不是 404,容易误判
怎么选:看 URL 和磁盘路径是否需要“对齐”
不用记规则,直接看你的部署结构:
- 前端打包产物整个放在
/opt/app/dist,你想通过/app/访问它 → 用alias:location /app/ { alias /opt/app/dist/; } - 你有一堆项目都放在
/var/www/下,zuiyu/、test/是子目录,想分别用/zuiyu/、/test/访问 → 用root:location /zuiyu/ { root /var/www; } - 要托管用户上传的图片,路径统一为
/uploads/xxx.jpg,但文件实际存在/mnt/storage/uploads/→ 用alias,且注意/mnt/storage/uploads/权限和 SELinux 上下文
alias 的替换逻辑更“干净”,但约束更多;root 更宽松,但路径结构必须配合。真实环境里,混用很常见,关键是每次改完 reload 后,用 curl -I http://localhost/xxx 看响应头和日志里的实际文件路径,比死记规则管用。










