Nginx-那些事儿05

nginx-location匹配规则
是根据ip+port来匹配的,/后边表示匹配的路径(例如:/Test相当于后台存在一个Test控制器(重点)

语法规则:

# = 开头表示精准匹配
# ~ 大小写敏感
# ~* 忽略大小写
# ^~ 只需匹配uri开头
# @ 定义一个命名的 location,在内部定向时使用,例如 error_page
location  [ = | ~ | ~* | ^~ ] /uri/ { ... }
location @name { ... }

1、 任意匹配

# 匹配所有请求,但是正则和最长字符串会优先匹配
location / {
    #规则
}

2、“=” 精准匹配

# 精确匹配 / ,可以匹配类似 `http://www.example.com/` 这种请求,'/'后不能带有任何内容
location = / {
	   #规则
}

3、“~” 大小写敏感

location ~ /Test/ {
	 #规则
}

#可以匹配    http://www.test.com/Test/
#不可以匹配    http://www.test.com/test/

4、 “~*” 大小写忽略

# ~* 会忽略uri部分的大小写
location ~* /Test/ {
   #规则
} 
#可以匹配    http://www.test.com/test/

5、 “^~” 只匹配uri开头

#以 /test/ 开头的请求,都可以匹配上  区分大小写
location ^~ /test/ {   
	#规则
}
#可以匹配    http://www.test.com/test/

6、“@” 命名匹配

#以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 @img_err 这条规则上。
location /img/ {
	 error_page 404 @img_err;
}
location @img_err {
  # 规则
}

7、以内容结尾匹配

# 匹配所有以 gif,jpg或jpeg 结尾的请求   根据后缀来做规则; 请求图片   特殊格式的文件
location ~* \.(gif|jpg|jpeg)$ {
	 #规则
}

8、location匹配优先级

在配置中需要注意的一点就是location的匹配规则和优先级

  • = 开头表示精确匹配
  • ^~ 开头表示uri以某个常规字符串开头,不是正则匹配;
  • ~ 开头表示区分大小写的正则匹配;
  • ~* 开头表示不区分大小写的正则匹配;
  • / 通用匹配, 如果没有其它匹配,任何请求都会匹配到;

9、location的匹配流程

A、判断是否精准匹配,如果匹配,直接返回结果并结束搜索匹配过程。

B、判断是否普通匹配,如果匹配,看是否包含^~前缀,包含则返回,否则记录匹配结果,(如果匹配到多个location时返回或记录最长匹配的那个)

C、判断是否正则匹配,按配置文件里的正则表达式的顺序,由上到下开始匹配,一旦匹配成功,直接返回结果,并结束搜索匹配过程。

D、如果正则匹配没有匹配到结果,则返回步骤B记录的匹配结果。

注意:

A、多个普通匹配的location时,和location的顺序无关,总是匹配所有的location,然后取匹配最长的location作为结果

B、多个正则匹配的location时,和顺序有关,从上到下依次匹配,一旦匹配成功便结束,直接返回结果。

posted @ 2022-07-18 02:03  Raymon撸码记  阅读(26)  评论(0编辑  收藏  举报