码迷,mamicode.com
首页 > 其他好文 > 详细

nginx中location配置及匹配详解

时间:2018-07-15 16:14:27      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:ott   bottom   pad   完全   路径   style   erro   失败   tom   

nginx中location配置及匹配详解

1location语法规则

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内部跳转

2location匹配顺序

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

 

1.首先匹配=

2.其次匹配^~

3.再其次按照配置文件的顺序进行正则匹配

4.最后是交给/进行通用匹配

提示:当有匹配成功时,立刻停止匹配,按照当前匹配规则处理请求

特别注意:

1、字符串匹配优先搜索,但是只是记录下最长的匹配 ( 如果 ^~ 是最长的匹配,则会直接命中,停止搜索正则 ),然后继续搜索正则匹配,如果有正则匹配,则命中正则匹配,如果没有正则匹配,则命中最长的字符串匹配.,需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个匹配的正则表达式将停止搜索。

 

2、一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

 

location匹配的nginx变量是 $request_uri

3location实例说明

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配置及匹配详解

标签:ott   bottom   pad   完全   路径   style   erro   失败   tom   

原文地址:http://blog.51cto.com/longlei/2142957

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!