Nginx location配置 正则表达式

2019-09-05 13:53:21   Linux

  nginx  

原文地址

匹配符号说明

~       区分大小写匹配

~*     不区分大小写匹配

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

^      以什么开头的匹配

$      以什么结尾的匹配

*      代表任意字符

     

文件及目录匹配


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

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

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

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

匹配符优先级

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 ^~ /images/ {  configuration C }

 匹配任何已/images/开头的查询并且停止搜索。任何正则表达式将不会被测试。
location ~* .(gif|jpg|jpeg)$ {   configuration  D }

 匹配任何已.gif、.jpg 或 .jpeg 结尾的请求,但是 所有  /images/开头的请求 会匹配到  configuration C
location  @named {  configuration  E } 
它是专门用来处理“内部重定向(internally redirected )