different between alias and root in nginx

在nginx配置文件中,为了定义web服务的root目录,也就是www document路径,有两种方式:

  1. root
  2. alias

那么这两种指令的区别有什么呢?通过查阅文档呢,从配置语法上有如下不同

指令 配置区段
root http/server/location
alias location
  1. root是可以配置在多个区段的,同时由于nginx配置的继承性,里层的区段是会继承外层的root值的,而alias只能定义在location层,那么明显是没有这些东西的
  2. 在访问是root的处理结果是root代表的路径+location路径,而alias则是使用alias配置的路径替换掉location

例如同样是访问服务器shangmiande /t/a.html,考虑如下配置

1
2
3
4
5
6
7
8
#1
location ^~ /t{
root /www/root/html;
}
#2
location ^~ /t {
alias /www/root/html/new_t/;
}

在情况1的配置之下,访问到的最终是/www/root/html/t/a.html

在情况2的配置之下,访问到的最终文件/www/root/html/new_t/a.html

另外还看到了如下注意事项:

  1. alias配置的路径之后必须以’/‘结尾
  2. alias在使用正则表达式时必须对要匹配的内容进行捕获并且在内容处理中进行引用

对于两者的区别分清楚之后,在使用过程中就是根据情况来进行选择了,官方文档中说:当locatin最后一部分匹配文件路径的时候

When location matches the last part of the directive’s value:

1
2
3
4
5
> > location /images/ {
> > alias /data/w3/images/;
> > }
> >
> >

it is better to use the root directive instead:

1
2
3
4
> > location /images/ {
> > root /data/w3;
> > }
> >

转载请注明来源链接 http://just4fun.im/2017/09/26/different-between-alias-and-root-in-nginx/ 尊重知识,谢谢:)