一句话总结:root会将location名称拼接到目录后面作为资源目录;alias会直接从目录找寻,不拼接location名称。

root

1
2
3
Syntax: root path;
Default: root html;
Context: http, server, location, if in location

为请求设置根目录。例如,使用以下配置

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name test.com;

location /abc/ {
root /usr/share/nginx/html;
index index.html;
}
}

在这个例子中,/usr/share/nginx/html 被设置为文件根目录。这意味着当 Nginx 接收到指向 test.com/abc/index.html 的请求时,它会从 /usr/share/nginx/html/abc/ 目录开始查找请求index.html的资源。

路径值可以包含变量,除了$document_root和$realpath_root。

alias

1
2
3
Syntax: alias path;
Default: —
Context: location

定义指定位置的替换。例如,使用以下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name test.com;

location /abc/ {
root /usr/share/nginx/html;
index index.html;
}

location /def/ {
alias /usr/share/nginx/testAlias/;
index index.html;
}
}

这个时候,请求test.com/def/index.html将会从alias /usr/share/nginx/testAlias/目录来寻找index.html,区别于root指令,不是从/usr/share/nginx/testAlias/def/目录找。

有一种情况

1
2
3
location /images/ {
alias /data/w3/images/;
}

当location匹配alias指令目录的最后一部分时,这时候等同于root,并且推荐使用root指令来替代:

1
2
3
location /images/ {
root /data/w3;
}