`
lixin_880415
  • 浏览: 3790 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Nginx的location匹配规则

 
阅读更多
Nginx的location匹配规则

Nginx的Location可以有以下几个匹配:
〖=〗  严格匹配这个查询。如果找到,停止搜索。
〖^~ 〗 匹配路径的前缀,如果找到,停止搜索。
〖~ 〗 为区分大小写的正则匹配
〖~*〗 表示不区分大小写的正则匹配
〖@〗 指定一个命名的location,一般只用于内部重定向请求。

首先对字符串进行匹配查询,最确切的匹配将被使用。然后,正则表达式的匹配查询开始,匹配第一个结果后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果,如果字符串和正则都匹配,那么正则优先级较高。

例子:
location = /{
  # 只匹配对 / 目录的查询.
  [ config A ]
}

location /{
  # 匹配以 / 开始的查询,即所有查询都匹配。
  [ config B ]
}

location ^~ /images/{
  # 匹配以 /images/ 开始的查询,不再检查正则表达式。
  [ config C ]
}

location ~* \.(gif|jpg|jpeg)$ {
  # 匹配以gif, jpg, or jpeg结尾的文件,但优先级低于config C。
  [ config D ]
}

如果要定义多个location,则可以有2种方式:
使用/ :
location / {
  client_max_body_size 200m;
  proxy_connect_timeout 30;
  proxy_set_header Host $http_host;
  proxy_set_header x-forwarded-for $remote_addr;
  proxy_pass http://127.0.0.1:8008;
}
location /tmp/{
  root /; internal;
}
采用这种方式,/tmp可以放在/的下面,因为“/是匹配任何查询,但是正则表达式规则和长的块规则将被优先和查询匹配”
使用~ /* :
location ~ /tmp/ {
  root /tmp; internal;
}
location ~ /* {
  client_max_body_size 20m;
  proxy_connect_timeout 30;
  fastcgi_pass fpass;
  include fastcgi_params;
}
采用这种方式,/tmp则必须放在~ /*这个前面,因为~是正则匹配的,正则匹配是有顺序的,只要匹配上就不会再往下匹配了。除非在conf中有定义=或者^~,也就是说=和^~的优先级最高,如果匹配上,就不会再去匹配其它的规则了。

总之,引用Nginx的官方文档的匹配规则:
Directives with the = prefix that match the query exactly. If found, searching stops.All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.Regular expressions, in order of definition in the configuration file.If #3 yielded a match, that result is used. Else the match from #2 is used.
注意:正则表达式的匹配是有顺序的,按顺序匹配。其它的匹配理论上讲是只有优先级,而没有顺序的。
总之:
(location =) > (location 完整路径 >)>(location ^~ 路径) >(location ~* 正则)>(location 路径)
只要匹配到,其它的都会忽略,然后返回到改匹配。
如果都是正则,都能够匹配,以配置文件出现顺序来,谁在前谁优先。
分享到:
评论

相关推荐

    nginx location匹配实例详解

    Nginx配置指令location匹配符优先级和安全问题详解Nginx location 匹配规则Nginx服务器的location指令匹配规则详解利用nginx如何匹配多个条件Nginx location匹配规则的方法示例简介Nginx中的location匹配规则nginx ...

    Nginx location匹配规则的方法示例

    主要介绍了Nginx location匹配规则的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详解Nginx location 匹配规则

    语法规则 location [=|~|~*|^~] /uri/ { … } 模式 含义 ...location = /uri = 表示精确匹配,只有完全匹配上才能生效 ...location ^~ /uri ...通用匹配,任何未匹配到其它location的请求都会匹配到,相当于swit

    nginx的server和location匹配规则

    nginx的server和location匹配规则

    Nginx关于location的匹配规则详解.docx

    NULL 博文链接:https://eyesmore.iteye.com/blog/1141660

    简介Nginx中的location匹配规则

    location匹配命令 ~ #波浪线表示执行一个正则匹配,区分大小写 ~* #表示执行一个正则匹配,不区分大小写 ^~ #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 = #进行普通...

    Nginx服务器的location指令匹配规则详解

    Nginx 中的 Location 指令 是NginxHttpCoreModule中重要指令。Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的”/uri/”,可以是字符串或正则表达式。但如果要使用正则表达式,则必须指定前缀。 nginx ...

    一文弄懂Nginx的location匹配的实现

    之前对 location 的匹配规则是一知半解的。为了搞明白 location 是如何匹配的,特意花了点时间查了些资料,总结此文。希望能给大家带来帮助。 语法规则 location [ = | ~ | ~* | ^~ ] uri { ... } location @name ...

    nginx 配置location匹配规则实例讲解

    nginx的配置指令的作用域可以分为 main,server,location这3个种,实际上这3者不是依次包含的关系,而是相互独立的关系,比如一个只具有main级别作用域的指令,是不能写在某个server或者location内的,模块的某个...

    Nginx配置之location的匹配优先级浅析

    主要给大家介绍了关于Nginx配置之location的匹配优先级的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    Nginx Location指令URI匹配规则详解小结

    1、介绍 location指令是http模块当中最核心的一项配置,根据预先定义的URL匹配规则来接收用户发送的请求,根据匹配结果,将请求转发到后台服务器、非法的请求直接拒绝并返回403、404、500...4、location URI匹配规则

    nginx location 配置 正则表达式实例详解

    1.location 介绍 •location 是在 server 块中配置,用来通过匹配接收的uri来实现...2.localtion 匹配规则 •location [ = | ~ | ~* | ^~ ] uri { … } •location @name { … } 注1:规则不能混合使用  注2:以下例

    Nginx服务器中的location配置详解

    location匹配测试只使用请求URI的部分,而不使用参数部分。(原因:参数的写法太多,无法精确匹配) location匹配顺序 多个location配置的前提下,location的匹配顺序(未验证,嘿嘿,google上搜的) 1.首先匹\u914d...

    Nginx正则表达式相关的参数和规则介绍

    最近帮客户配置服务器,经常修改Nginx的配置文件,频繁的用到正式匹配规则,这里整理了一些常用的正则参数及规则,以备查询。 Nginx配置中Location的语法规则 location [ = | ~ | ~* | ^~ | !~ | !~* ] /uri/{ … } ...

    如何利用nginx通过正则拦截指定url请求详解

    匹配规则 location / { if ($request_uri ~* ^/\?http(.*)$) { return 404; } } 经过这样的匹配,我们就可以拦截所有请求根目录的网址并且参数为?httpxxx类似的请求都会显示404. 防盗链 返回http代码,例如设置...

Global site tag (gtag.js) - Google Analytics