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时,和顺序有关,从上到下依次匹配,一旦匹配成功便结束,直接返回结果。
本文来自博客园,作者:Raymon撸码记,转载请注明原文链接:https://www.cnblogs.com/RaymonGoGo/p/16489065.html