一、引言
众所周知在nginx.conf配置文件中,可以配置多个虚拟主机,那么在虚拟主机中需要配置一个location。 那这个location是有何作用呢? location有几种匹配模式?,几种匹配模式之间的优先级又是怎么样的? 那么,带着这几个问题来看今天所要讲解的文章。希望大家对nginx配置文件有进一步对了解,也希望给大家带来帮助,谢谢!!!
二、location有何作用? 几种匹配方式?
location有“定位”的意思,根据请求不同的URL来进行不同的处理。在虚拟主机中(server),location配置是必不可少的,可以把网站不同的部分定位到不同的处理方式上。
location大致可以分为三种匹配。
1 location = patt {} 精准匹配、2 location patt {} 一般匹配、3 location ~ patt {} 正则匹配
三、location匹配模式之间的优先级顺序
1 、精准匹配 VS 一般匹配
我们来看下这段配置,左边是精准匹配,右边是一般匹配。 当我们访问/index.html的时候,按道理两个location都能匹配上。由于精准匹配优先级比一般匹配大,所以会访问到/var/www/html这个目录下的index.html页面。
location = /index.html { location /index.html {
root /var/www/html; root /usr/local/nginx/html;
index index.html index.htm; index index.html index.htm;
} }
2、一般匹配 VS 正则匹配
如果配置中没有精准理匹配,那么那我们nginx会先找一般匹配,如果找到了一般匹配,nginx也不会里面返回的结果的。而是会把这个一般匹配先记忆好,然后再去找正则匹配。如果正则匹配成功,则会覆盖之前记忆,采用正则。反之如果正则没有匹配上,则采用之前记忆好的规则。
下面这比较,当我们ip或者域名后面不输入任何路径,会默认有一个/,我们nginx先是匹配到一般匹配,然后保存记忆。再去找正则匹配,刚刚好正则匹配也是能匹配上的,最后也是会访问到/var/www/html目录下。
location ~ / { location / {
root /var/www/html; root /usr/local/nginx/html;
index index.html index.htm; index index.html index.htm;
} }
3、一般匹配 VS 一般匹配
当我们只有一般匹配的时候,那我们的优先级的顺序又是什么呢? nginx会采用匹配长度较长的一般匹配的规则来使用。当我们在浏览器输入路径后面是/index.html的时候,两个location都会匹配上,但是其中有一个一般匹配“location /index.html”,它匹配上的字符更多,则采用它定义的规则使用。最后会访问到/var/www/html目录下。
location /index.html { location / {
root /var/www/html; root /usr/local/nginx/html;
index index.html index.htm; index index.html index.htm;
} }
4、总结
可能经过上面3个比较,可能描述的是太清楚,那在这里我们在总结一下location解析过程。
1、首先判断是否有命中精准匹配,如果有命中,则立即返回结果并结束解析过程。
2、如果没有命中精准匹配,则进行一般匹配,如果有命中一般匹配。保存匹配字符最多的命中结果(只保存,不退出)
3、继续判断正则表达式的解析结果,按配置中表达式顺序为准。从上开始匹配,一旦匹配成功1个,立即返回结果,并退出解析过程。如果没有匹配成功,则取一般匹配保存的结果为准。
最后,本章用文字来进行表达效果可能不太好,请原谅小编的表达能力有限。如有不懂的地方请评论告诉小编,小编一定加以改正!!!