Nginx—配置指令root和alias的区别

  • 1. 实验
  • 2. root和alias的区别


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 		}

nginx alias 中文 nginx配置alias_nginx

[root@server1 ~]# cd /opt/
[root@server1 opt]# ls
demo
[root@server1 opt]# mkdir test
[root@server1 opt]# mv demo test/

nginx -s reload					#在不暂停服务的情况下重新加载

nginx alias 中文 nginx配置alias_服务器_02


测试:

在页面中:http://172.25.1.1/demo/
http://172.25.1.1/demo/huge.jpg

nginx alias 中文 nginx配置alias_服务器_03

nginx alias 中文 nginx配置alias_nginx alias 中文_04

alias

vim /usr/local/nginx/conf/nginx.conf

 47         location /demo {
 48             alias /opt/test;
 49 		}

nginx -s reload

nginx alias 中文 nginx配置alias_nginx_05

测试:
在页面中http://172.25.1.1/demo/
http://172.25.1.1/demo/huge.jpg

nginx alias 中文 nginx配置alias_vim_06


nginx alias 中文 nginx配置alias_nginx alias 中文_07

root@server1 demo]# mv huge.jpg ..	#将图片移到上层目录
[root@server1 demo]# cd ..	
[root@server1 test]# ls				#此时图片的位置在/opt/test/中

再次测试

nginx alias 中文 nginx配置alias_nginx_08

2. root和alias的区别

在上面的实验中:

  • root
    location块匹配的url为"/demo",root指令的路径为"/opt/test",那么,根据上述配置,当我们访问"/demo"这个urI时,实际上访问的是/opt/test/demo路径
    配置上述location块后,当我们访问/demo/test1/huge.jpg这个url时,我们访问的是/opt/test/demo/test1/huge.jpg简单来说,root就是把url路径补在指定路径后面
  • alias
    location块匹配的url为"/demo",alias指令的路径为/opt/test 。如你所见,alias指令对应的值也是一个路径,当alias指令与location块结合时,当我们访问/demo/huge.jpg时,其实就是在访问服务器的/opt/test/huge.jpg,也就是说,当我们使用alias时,location的urI是与alias的路径完全对等的

看到此处,root指令和alias指令的区别就很明显了:

  • root指令会将location块的"url路径"带入到"root指令路径"中,将带入后的路径作为"最终路径",使用"最终路径"与urI建立对应关系。
  • alias指令则直接将location块的"urI路径"与"alias指令路"建立对应关系
  • alias指令和root指令能够处于的上下文位置也不同,alias指令只能在location块中使用,而root指令则不然