nginx中location配置及匹配详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx中location配置及匹配详解相关的知识,希望对你有一定的参考价值。
nginx中location配置及匹配详解
1、location语法规则
Location 基础知识
1.location 是在 server 块中配置。
2.可以根据不同的 URI 使用不同的配置(location 中配置),来处理不同的请求。
3.location 是有顺序的,会被第一个匹配的location 处理。
语法规则: 1. location [ = | ~ | ~* | ^~ ] uri { ... } 2. location @name { ... } | |
location = /uri | =开头表示精确匹配,只有完全匹配上才能生效 |
location ^~ /uri | ^~ 开头对URL路径进行前缀匹配,并且在正则之前 |
location ~ 正则表达式 | ~开头表示区分大小写的正则匹配 |
location ~*正则表达式 | ~*开头表示不区分大小写的正则匹配 |
location !~ 正则表达式 | !~区分大小写不匹配的正则 |
location !~*正则表达式 | !~*不区分大小写不匹配的正则 |
location /uri | 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后 |
location /uri | 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default |
location @名称 | nginx内部跳转 |
2、location匹配顺序
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
1.首先匹配=
2.其次匹配^~
3.再其次按照配置文件的顺序进行正则匹配
4.最后是交给/进行通用匹配
提示:当有匹配成功时,立刻停止匹配,按照当前匹配规则处理请求
特别注意:
1、字符串匹配优先搜索,但是只是记录下最长的匹配 ( 如果 ^~ 是最长的匹配,则会直接命中,停止搜索正则 ),然后继续搜索正则匹配,如果有正则匹配,则命中正则匹配,如果没有正则匹配,则命中最长的字符串匹配.,需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个匹配的正则表达式将停止搜索。
2、一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。
location匹配的nginx变量是 $request_uri
3、location实例说明
(1)”=” 精确匹配
location = / {
#规则
}
# 则匹配到 `http://www.example.com/` 这种请求。
(2)”~” 大小写敏感
location ~ /Example/ {
#规则
}
#请求示例
#http://www.example.com/Example/ [成功]
#http://www.example.com/example/ [失败]
(3)”~*” 大小写忽略
location ~* /Example/ {
#规则
}
# 则会忽略 uri 部分的大小写
#http://www.example.com/Example/ [成功]
#http://www.example.com/example/ [成功]
(4)”^~” 只匹配以 uri 开头
location ^~ /img/ {
#规则
}
#以 /img/ 开头的请求,都会匹配上
#http://www.example.com/img/a.jpg [成功]
#http://www.example.com/img/b.mp4 [成功]
(5)”@” nginx内部跳转
location /img/ {
error_page 404 @img_err;
}
location @img_err {
# 规则
}
#以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 @img_err 这条规则上。
以上是关于nginx中location配置及匹配详解的主要内容,如果未能解决你的问题,请参考以下文章