1.实验
在nginx中,我们可以通过location块与root指令结合的方式,将"url"与"服务器路径"建立起对应关系,location块负责匹配url,root指令负责将匹配到的url与服务器中某个具体目录对应起来
其实,除了root指令,还有另一个指令也能实现类似的功能,它就是alias指令,root指令和alias指令都能将urI和服务器路径进行对应,但是它们之间又存在一些区别
下面通过一个实验来了解root和alias的区别
root
vim /usr/local/nginx/conf/nginx.conf
47 location /demo {
48 root /opt/test;
49 }
[root@server1 ~]# cd /opt/
[root@server1 opt]# ls
demo
[root@server1 opt]# mkdir test
[root@server1 opt]# mv demo test/
nginx -s reload #在不暂停服务的情况下重新加载
测试:
在页面中:http://172.25.254.1/demo/
http://172.25.254.1/demo/c.jpg
alias
vim /usr/local/nginx/conf/nginx.conf
47 location /demo {
48 alias /opt/test;
49 }
nginx -s reload
测试:在页面中http://172.25.254.1/demo/
http://172.25.254.1/demo/c.jpg
[root@server1 demo] mv c.jpg .. #将图片移到上层目录
[root@server1 demo] cd ..
[root@server1 test] ls #此时图片的位置在/opt/test/中
再次测试
2.root和alias的区别
在上面的实验中:
- root
location块匹配的url为"/demo",root指令的路径为"/opt/test",那么,根据上述配置,当我们访问"/demo
"这个urI时,实际上访问的是/opt/test/demo
路径
配置上述location块后,当我们访问/demo/test/c.jpg
这个url时,我们访问的是/opt/test/demo/test/c.jpg
简单来说,root就是把url路径补在指定路径后面 - alias
location块匹配的url为"/demo
",alias指令的路径为/opt/test
。如你所见,alias指令对应的值也是一个路径,当alias指令与location块结合时,当我们访问/demo/c.jpg
时,其实就是在访问服务器的/opt/test/c.jpg
,也就是说,当我们使用alias时,location的urI是与alias的路径完全对等的
看到此处,root指令和alias指令的区别就很明显了:
-
root指令会将location块的"url路径"带入到"root指令路径"中,将带入后的路径作为"最终路径",使用"最终路径"与urI建立对应关系。
-
alias指令则直接将location块的"urI路径"与"alias指令路"建立对应关系
-
alias指令和root指令能够处于的上下文位置也不同,alias指令只能在location块中使用,而root指令则不然