root在location中将完整请求URI(去开头/)原样拼接到指定路径后查找文件,不截前缀;需截前缀应改用alias。

在 location 块中用 root 指令,核心是理解“拼接逻辑”——Nginx 会把 匹配到的完整请求 URI(去掉开头的 /)直接追加到 root 路径后面,然后去文件系统里找。不是替换、不是截断,就是原样拼。
root 在 location 中怎么生效
root 的值必须是绝对路径(如 /var/www/my-app),不推荐相对路径;它只定义“从哪开始找”,不指定具体文件。Nginx 自动补上请求路径后,再结合 index 指令(默认 index.html)决定最终读哪个文件。
- 配置:
location /blog { root /opt/sites; } - 访问
/blog/about.html→ 实际查找/opt/sites/blog/about.html - 访问
/blog/→ 查找/opt/sites/blog/index.html(前提是 index 指令启用)
常见错误:路径末尾斜杠和层级错位
root 值末尾加不加 / 不影响拼接行为,但容易因目录结构理解偏差导致 404。关键看物理路径是否存在对应子目录。
- 错误示例:
location /admin { root /var/www/html/admin; }+ 访问/admin/login.html
→ 拼成/var/www/html/admin/admin/login.html(多了一层 admin) - 正确写法:
location /admin { root /var/www/html; }→ 拼成/var/www/html/admin/login.html
与 server 级 root 配合使用更清晰
通常在 server 块设一个通用 root,再在特定 location 中覆盖它。这样避免重复写长路径,也便于统一管理。
- server 级:
root /var/www/default; - location 覆盖:
location /api-docs { root /usr/share/nginx/api-docs; }→ 此处完全独立,不受 server root 影响 - 未覆盖的 location(如
location /assets)仍沿用/var/www/default/assets/...
什么时候该换 alias 而不是 root
如果你希望 /static/ 这个 URL 前缀直接映射到 /data/static/ 目录下,且不保留 /static/ 这段路径,那就该用 alias:
-
location /static/ { alias /data/static/; }→/static/css/app.css查找/data/static/css/app.css - 同样需求用 root 就得写:
location /static/ { root /data; }→ 查找/data/static/css/app.css(多了 static 子目录)


















