Nginx中root和alias的区别

Nginx在配置访问静态页面的时候,经常使用root和alias两种方式,那么这两种方式有什么区别呢?

  • 如果使用root指定,那么url的请求路径是要加入到root指定的路径中
  • 如果使用alias指定,那么请求的url路径不需要加入到alias指定的路径中,但是alias指定的路径结尾一定要加”/”

alias用法举例

1、下面在Nginx配置文件中定义路由,group后面有”/”,并通过alias指定,如图:

创建html目录,并定义文件index.html的内容,如下:

mkdir -p /data/html
echo "hello, I am an nginx static file" > index.html

此时通过IP地址访问,可以看到已经访问成功,请求结果并没加入alias路径中,如图:

2、修改上面的路由,将group后面的”/”去掉,如图:

再次请求,可以发现对结果并不影响,如图:

因此,无论group后面有没有”/”,或者定义为/group/abc/def,对结果都没有影响,因为请求的路由不会加入到alias指定路径中

3、修改上述路由,添加一个abcd.html,并在/data/html下追加文件abcd.html,内容如下:

echo "hello, My name is abcd, I am an file" > abcd.html

此时通过Nginx来访问,默认还是访问到/data/html/index.html,如果要想访问到abcd.html,那么就需要将index.html删除,我们这里将index.html改为index.html.bak,然后再次请求,如图:

4、路由文件配置不变,在/data/html下新增目录abcd/def,以及index.html,如图:

在路由后加上新增的路径来请求,可以看到能请求到内容,如图:

5、下面看一个alias配合正则使用的案例,如图:

上图中的正则为匹配任意一个字符零次或多次,$1则是捕获正则中的内容,可以简单理解为$1对应的就是第一个括号中的内容,如果后面还有括号,那么想要捕获就是$2

此时通过http://ip/group/abcd请求,那么$1的值将会变为abcd,如图:

注意:alias只能用于指定目录,不能指定文件,否则请求会报错

root用法举例

1、修改上述路径,将alias改为root,如果直接访问将会报错,如图:

上面我们说过使用root指定路径后,location中的路由是会加入到路径中的,因此,我们在/data/html目录下创建group目录,并在group中定义index.html,内容如下:

hello, I am an nginx static file, in group

重新加载配置文件后,访问结果如图:

2、修改上面的路由,增加abcd.html,如图:

此时请求的时候实际是将/group/abcd.html追加到root路径后的,因此需要在group中创建abcd.html文件,内容为:

hello, My name is abcd.html, in group

再次通过浏览器请求,可以获取到内容,如图:

3、修改上面路由,通过正则方式匹配group[0-9],如图:

此时通过浏览器请求/group0、/group1、/group2将会匹配到/data/html/group0、/data/html/group1、/data/html/group2,如图:

注意:/data/html下需要有group0、group1等目录才可以,否则会报错

标签