Nginx 指定文件路径有两种方式 root 和 alias,指令的使用方法和作用域:

root

语法:root path

配置段:http、server、location、if

alias

语法:alias path

配置段:location

alias 是一个目录别名的定义,root 则是根目录(父目录)的定义。关于别名,我的理解是 alias 指定的是物理路径,location 指定的则是该物理路径的别名,一个物理路径可以存在多个别名。

举个例子:

location ^~ /blog/ {
    root /www;
}

location ^~ /music/ {
    alias /data/yinyue/;
}

当请求 URI 是 /blog/index.html 时,Nginx 会返回文件 /www/blog/index.html

当请求 URI 是 /music/happy.mp3 时,Nginx 会返回文件 /data/yinyue/happy.mp3

可见,别名 alias 的好处之一是,存储器上不一定真实存在别名路径。但使用 root 时,location 所匹配的路径一定是要真实存在的。

alias 指定的路径后面加不加/取决于 location 的路径定义,如果加了/则也要加,若没加则可加可不加。这是因为 alias 是别名,是完全替代的,当不加时,要想明白做完替代后后面的路径或文件是不是与前面的路径组成了一个新的文件或文件夹名。

root 指定的路径后面可以不加 /,因为 location 的路径(前面已经加了/)是加在它后面的,而不像 alias 那样是替代的。

此外,使用 alias 目录块中不能使用 rewrite 的 break。

所以,是要用 root 还是要用 alias,根据你的具体需求来吧。