我是靠谱客的博主 无奈仙人掌,最近开发中收集的这篇文章主要介绍Nginx基础(3)—— Location语法一、官方描述二、匹配顺序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、官方描述

nginx官方文档给出location语法如下:

	
location [=|~|~*|^~] uri { 
   .......
}

方括号中的四种标识符是可选项,用来改变请求字符串和uri的匹配方式

uri是待匹配的请求字符串,可以是不包含正则的字符串,这种模式被称为“标准uri";也可以包含正则,这种模式被称为"正则uri"

分类标识符描述
精确匹配=用于标准uri前,要求请求字符串和uri严格匹配。如果匹配成功,就停止匹配,立即执行该location里面的请求。
一般匹配普通匹配(最长字符匹配);与location顺序无关,是按照匹配的长短来取匹配结果。若完全匹配,就停止匹配。
^~非正则匹配;用于标准uri前,nginx服务器匹配到前缀最多的uri后就结束,该模式匹配成功后,不会使用正则匹配。
正则匹配~用于正则uri前,表示uri里面包含正则,并且区分大小写。
~*用于正则uri前,表示uri里面包含正则,不区分大小写。

补充:

1、针对~和~*匹配标识符,可以在前面加上!来取反

      !~ 表示正则不匹配,区分大小写

      !~* 表示正则不匹配,不区分大小写

2、/ 通用匹配,任何请求都会匹配到

二、匹配顺序

注意:

1、只有 = 是精准匹配,不会被正则覆盖

2、一般匹配,即使是完全匹配,也不是精准匹配

2.1 测试精准匹配

location1是正则匹配,location2是一般匹配,location3是精准匹配

当我们以http://172.17.0.2/a/b/c访问时,虽然1,2,3都会被命中,但是执行location3,屏幕输出“jing zhun”

2.2 测试一般匹配

同样是三个location,当我们以http://172.17.0.2/a/b/c去访问时,虽然1,2,3都会被命中,但是执行location3(最长匹配),屏幕输出“a/b/c”

2.3 测试正则匹配

我们在2.2基础上,再加一条location

当我们以http://172.17.0.2/a/b/c去访问时,虽然安装一般匹配的规则,1,2,3,4都会被命中,但最终还是被4覆盖,执行location4,屏幕输出“zheng ze”

但是正则匹配不会覆盖精准匹配和一般匹配中的非正则匹配

精准匹配不会被覆盖很好理解,我们来测试一下 一般匹配中的非正则匹配

把location3修改为非正则匹配,当我们以http://172.17.0.2/a/b/c去访问时,屏幕输出“a/b/c”

而且注意:如果有多个正则都满足,从上往下,匹配到第一个正则就会返回,不会继续往下匹配

 

 

 

 

最后

以上就是无奈仙人掌为你收集整理的Nginx基础(3)—— Location语法一、官方描述二、匹配顺序的全部内容,希望文章能够帮你解决Nginx基础(3)—— Location语法一、官方描述二、匹配顺序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部