root指令用于设定静态文件查找的基准目录,nginx将请求uri(去掉开头/)原样拼接到root指定的绝对路径后定位文件;可配置于http/server/location块,优先级location>server>http;与alias的区别在于root是拼接uri,alias是替换uri前缀。

root 指令用来告诉 Nginx:所有静态请求的文件,都从你指定的这个目录开始往下找。它不指向某个具体 HTML 文件,而是设定一个“起点”,Nginx 会把用户请求的路径(比如 /about/team.html)原样拼到这个起点后面,再去磁盘上找文件。
root 必须用绝对路径
Nginx 不识别相对路径,写 root ./html 或 root html 会直接报错或返回 403/404。必须以 / 开头,例如:
root /var/www/my-site;root /srv/app/public;
配置前请确认该目录真实存在,且 Nginx 工作进程(通常是 www-data 或 nginx 用户)有读取权限。
root 的拼接规则很关键
无论你在哪个配置块里写 root,Nginx 都按统一规则拼路径:
实际查找路径 = root 设置的路径 + 请求 URI 的完整路径(开头的 / 不参与拼接)
- 配置
root /data/web;,访问/images/logo.png→ 查找/data/web/images/logo.png - 配置
root /opt/uploads;,访问/uploads/photo.jpg→ 查找/opt/uploads/uploads/photo.jpg(注意多了一个 uploads) - 访问根路径
/时,Nginx 会尝试加载index.html(前提是启用了index index.html;)
配置位置和继承优先级
root 可以放在 http、server 或 location 块中,生效顺序是:
location 级最优先 → server 级次之 → http 级最低
- 如果
location /api/里写了root /var/www/api;,那这个 location 下的所有请求都按它来拼 - 如果某个
location没写root,就向上继承server块里的值;再没写,就用http块里的默认值
常见误区与替代方案
很多人想让 /static/ 请求直接映射到 /var/www/static 目录下的文件,却误用 root 导致路径多出一层前缀。这时更适合用 alias:
-
location /static/ { alias /var/www/static/; }→ 访问/static/logo.png就找/var/www/static/logo.png -
root是“拼接”,alias是“替换”——这是两者最本质的区别











