nginx 指定文件路径有两种方式 root 和 alias,主要区别在于 nginx 如何解释 location 后面的 uri,这会使两者分别以不同的方式将请求映射到服务器文件上。它们的使用方法和作用域:
[root]
语法:root path
默认值:root html
配置段:http、server、location、if
处理结果:root 路径+ location 路径
[alias]
语法:alias path
配置段:location
处理结果:使用 alias 路径替换 location 路径
如果一个请求的 URI 是/t/a.html 时,它们表现如下:
# 返回/www/root/html/t/a.html的文件
location ^~ /t/ {
root /www/root/html/;
}
# 返回/www/root/html/new_t/a.html的文件
# 把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
location ^~ /t/ {
alias /www/root/html/new_t/;
}
可以看出 alias 是一个目录别名的定义,root 则是最上层目录的定义。另外 alias 后面必须要用/
结束,否则会找不到文件的,而 root 则可有可无。
那如果 server 和 location 中都出现 root,是怎样的优先级呢??
http {
server {
listen 80;
server_name www.abc.com;
root /home/www/website/;
location / {
root /home/www/ts/;
index index.html;
}
}
}
简单的来说是就近原则,如果 location 中能匹配到,就是用 location 中的 root 配置,忽略 server 中的 root,当 location 中匹配不到的时候,则使用 server 中的 root 配置。