nginx中location配置及匹配详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx中location配置及匹配详解相关的知识,希望对你有一定的参考价值。

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配置及匹配详解的主要内容,如果未能解决你的问题,请参考以下文章

nginx location 配置详解

Centosnginx配置:location配置方法及实例详解

nginx配置文件nginx.conf详解

Nginx配置详解

nginx之location介绍

Nginx得Location配置详解之精准匹配