快捷搜索:

您的位置:澳门新葡4473网站 > 新闻社区 > Nginx location配置 正则表达式

Nginx location配置 正则表达式

发布时间:2019-12-25 05:05编辑:新闻社区浏览(122)

    语法:location [ = | ~ | ~* | ^~ ] uri { …一组命令… }

    一、 location 的匹配符

    Syntax:


    location [ = | ~ | ~* | ^~ ] uri { ... }
    location @name { ... }
       

      1.  语法格式:location [=|~|~*|^~|@]   /uri/ { … } ,
           依据不同的前缀“= ”,“^~ ”,“~ ”,“~* ”和不带任何前缀的(因为[ ] 表示可选,可以不要的),表达不同的含义, 
          简单的说尽管location 的/uri/ 配置一样,但前缀不一样,表达的是不同的指令含义。
            注意:查询字符串不在URI范围内。例如:/films.htm?fid=123 的URI 是/films.htm 。)

    location / {}:表示对/uri/目录及其子目录下的所有文件都匹配。所以”location / {}”的匹配范围是最大的。
    location = /uri/ {}:表示只对目录或文件进行匹配,不对目录中的文件和子目录进行匹配。所以一般只用来做文件匹配
    location ~ /uri/ {}:表示区分大小写的正则匹配。
    location ~* /uri/ {}:表示不区分大小写的正则匹配。
    location ^~ /uri/ {}:表示禁用正则匹配,即精确字符串匹配,此时正则中的元字符被解释成普通字符。

     

    配对规则

    2.对这些不同前缀,分下类,就2 大类:
          正则location ,英文说法是location using regular expressions
          普通location ,英文说法是location using literal strings 。
          那么其中“~ ”和“~* ”前缀表示正则location ,“~ ”区分大小写,“~* ”不区分大小写;
          其他前缀(包括:“=”,“^~ ”和“@ ”)和   无任何前缀   都属于普通location 。

    nginx先检查URI的前缀路径,在这些路径中找到最精确匹配请求URI的路径。然后nginx按在配置文件中的出现顺序检查正则表达式路径,匹配上某个路径后即停止匹配并使用该路径的配置,否则使用最大前缀匹配的路径的配置。

     

    使用”=”前缀可以定义URI和路径的精确匹配。如果发现匹配,则终止路径查找。例如请求”/”很频繁,定义”location = /”可以提高这些请求的处理速度,因为查找过程在第一次比较以后即结束。

    详细说明:

    配对优先级

    ~       区分大小写匹配

    (location = uri )  >  (location ^~ uri)  >  (location *~|~ uri)  >  (location uri)
    等号           >        非正则          >               正则         > 没有任何符号

    ~*     不区分大小写匹配

    !~      区分大小写不匹配
            !~*    不区分大小写不匹配

    ^      以什么开头的匹配

    $      以什么结尾的匹配

    *      代表任意字符

         

         文件及目录匹配

    -f和!-f用来判断是否存在文件

    -d和!-d用来判断是否存在目录

    -e和!-e用来判断是否存在文件或目录

    -x和!-x用来判断文件是否可执行

     

    3.匹配符优先级 1.=
    2.空匹配符,满足精确匹配时
    3.^~
    4.~或~*
    5.空匹配符,满足以指定模式开始时的匹配时

    匹配规则是:最大前缀匹配(与顺序无关)
    如果恰好是严格精确匹配结果或者加有前缀“ ^~ ”或“ =     则停止搜索正则 location
    对于正则 location 的匹配规则是:按编辑顺序逐个匹配(与顺序有关)
    只要匹配上,就立即停止后面的搜索

     

    实例分析:

             location = / {  configuration A }

             # = 表示精确的查找地址,如location = /  它只会匹配uri为/的请求,

             如果请求为/index.html,将查找另外的location,而不会匹配这个,
             当然可以写两个location,location = /和location /,这样/index.html将匹配到后者
             如果你的站点对/的请求量较大,可以使用这个方法来加快请求的响应速度。

     

            location  / {  configuration B  }

              # 遵守普通location 的最大前缀匹配,由于任何URI 都必然以“/ ”根开头,所以对于一个URI ,如果有更specific 的           匹配,那自然是选这个更specific 的,如果没有,“/ ”一定能为这个URI 垫背(至少能匹配到“/ ”),也就是说“                     location / {} ”有点默认配置的味道,其他更specific的配置能覆盖overwrite 这个默认配置        
              (这也是为什么我们总能看到location / {} 这个配置的一个很重要的原因)

     

             location ^~ {  configuration C }

    # 匹配任何已开头的查询并且停止搜索。任何正则表达式将不会被测试。

    location ~* .(gif|jpg|jpeg)$ {   configuration  D }

    # 匹配任何已.gif、.jpg 或 .jpeg 结尾的请求,但是 所有  开头的请求 会匹配到  configuration C

     

           location  @named {  configuration  E } 
           #它是专门用来处理“内部重定向(internally redirected )

     

     

    本文由澳门新葡4473网站发布于新闻社区,转载请注明出处:Nginx location配置 正则表达式

    关键词: