nginx 之root与alias

nginx 作为web服务器的时候配置本地文件路径使用的是root 或者alias 两者有很大的不同。主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。

作用域

[root]   配置段:http、server、location、if。

[alias]  配置段:location。

含义的不同

注意两者不是改变请求的uri 而是在匹配的区域告知请求文件的路径。

root  root路径+客户端uri

root是作为一个最上层的目录,例如请求http://www.kzf.com/test/a.html root配置为 root html/asdf/dev/ 那么文件的寻找路径就是html/asdf/dev/test/a.html。root 后面的路径不会替代location的uri 而是最前面的根路径。

alias 使用alias路径替换location路径

    location  /dev/ {
       alias /data/nginx/html/alias/;

    }

注意alias后面路径替换的是location中的/dev 而不是客户端请求中的uri。例如请求为http://www.kzf.com/dev/a.html 那么文件寻找路径就是/data/nginx/html/alias/a.html,如果请求是http://www.kzf.com/dev/qa/a.html 那么文件寻找路径就是/data/nginx/html/alias/qa/a.html 并没有替换qa这个路径。

alias是一个目录别名的定义,root则是最上层目录的定义。

注意格式

1、还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的,如果不配置/ 那么当请求的url 里面的路径最后也没有/ 那么就找不到,如果url 最后有/ 就可以。

2、而root则可有可无

3、alias 必须配置绝对路径不可用相对路径,而root 可以,因为root 有默认跟路径。例如root 可以配置为 root html/asdf 但是alias 只能配置为/data/nginx/html/asdf/

4、alias 的location 后面的uri 最后也要配置/,举例 location /dev/ ,而不是 location /dev