root指令用于指定静态文件查找的基准目录,nginx将请求uri(去掉开头/后)完整拼接到root路径末尾定位文件;可配置于http、server或location块,优先级location>server>http;与alias不同,root不剥离location匹配前缀。

root 指令是 Nginx 中为虚拟主机指定静态资源根目录的核心配置项。它告诉 Nginx:当用户访问某个 URL 时,应该从哪个本地文件系统路径开始查找对应的文件。
✅ root 指令的基本用法
在 server 块中使用:
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.html;
}
- 请求
http://example.com/→ 查找/var/www/example.com/index.html - 请求
http://example.com/css/style.css→ 查找/var/www/example.com/css/style.css - 路径拼接规则:
root + URI 路径(URI 是请求路径,不含域名和查询参数)
注意:
root后面的路径不自动追加斜杠,但结尾加不加/不影响功能;推荐统一加/提高可读性,如/var/www/example.com/
? root 的作用范围取决于 location 块位置
- 如果
root写在server块里,它对整个虚拟主机生效(所有location默认继承); - 如果写在某个
location块内,则只对该 location 生效,且会覆盖 server 级的 root。
例如:
server {
root /var/www/default;
location / {
# 使用 /var/www/default/
}
location /api/ {
root /opt/backend;
# 此处请求 /api/data.json → 实际查找 /opt/backend/api/data.json
}
}
⚠️ 关键细节:location /api/ 中的 root /opt/backend,Nginx 会把完整 URI(包括 /api/)拼到 root 后面,所以必须确保目录结构匹配。
? root 和 alias 的区别(易错点)
| 特性 | root |
alias |
|---|---|---|
| 路径拼接方式 | root + 完整 URI |
alias + URI 去掉 location 匹配前缀 |
| 典型用途 | 整站根目录 | 映射某个子路径到独立目录(如 /static/ → /usr/share/images/) |
| 示例 |
location /img/ { root /data; } → /img/logo.png → /data/img/logo.png
|
location /img/ { alias /data/images/; } → /img/logo.png → /data/images/logo.png
|
✅ 简单记:想让整个站点从某目录服务,用 root;只想把某个路径“映射”到另一个目录,优先考虑 alias。
? 配置建议与注意事项
- 目录必须存在,且 Nginx worker 进程(通常是
www-data或nginx用户)有读取权限; - 不要将
root指向敏感系统目录(如/etc、/root),防止路径遍历风险; - 避免在
root中使用变量(如$host),除非明确需要动态根目录,且已做好安全校验; - 修改后务必测试配置:
nginx -t,再重载:nginx -s reload或systemctl reload nginx。
不复杂但容易忽略。关键是理解 root 是“起点”,而 URI 是“相对路径”,二者拼起来才是真实文件路径。











