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 这条规则上。
原文:http://blog.51cto.com/longlei/2142957
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!