您的位置:首页 > 运维架构 > Nginx

nginx中location配置及匹配详解

2018-07-15 15:17 537 查看

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 这条规则上。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息