zoukankan      html  css  js  c++  java
  • nginx的location匹配顺序

    总原则:先前缀字符串,再正则表达式。

    不管配置文件中的location顺序怎么写,在匹配时,都会先将所有前缀字符串拎出来,放在第一位;然后再去找所有正则表达式,作为第二位。

    1、首先匹配前缀字符串。前缀字符串有以下几种形式(举例):

    a、location = /data/ {}

    b、location ^~ /data/ {}

    c、location /data/ {}

    2、然后匹配正则表达式。正则表达式的几种形式(举例):

    d、location ~ .html? {}

    e、location ~* .html? {}

    a的权限最大,一旦匹配到,立即停止,直接使用对应的location。

    b的权限次之,一旦匹配到,就不再检查正则表达式。相当于打断了后续。

    c如果匹配到了,不会立即停止,而是会先将它存储起来,然后继续往下匹配。

    d如果匹配到了,立即停止,直接使用对应的location;

    d如果没有匹配,继续往下找。

    e如果匹配到了,立即停止,直接使用对应的location;

    e如果没有匹配,就使用先前存储的那个前缀字符串。

    也就是说,location /data/ {}这种模式是等级最低的。实在匹配不到了,才勉强使用它。

    前提是我们配置了a、b、c、d、e这五个location。

    如果只配置了a、b、c,就没有正则匹配什么事了;

    如果只配置了d、e,就没有前缀匹配什么事了。

    那么什么叫最长匹配呢?

    一个请求为:http://www.example.com/images/a.png

    对于/images/a.png这个URI来说,上面的2个location中,location /images/是最长匹配。虽然location /也能匹配,但不是最长的。

    由于不是精确匹配,nginx此时会先将这个最长匹配保存起来

    如果后面配置了正则表达式,那么nginx会继续向下匹配正则表达式。

    如果后面没有配置正则表达式,nginx就会使用刚才保存的最长的那个前缀匹配,也就是location /images/对应的地方。

  • 相关阅读:
    Comparable内部比较器 和 Comparator外部比较器
    java——包装类数据缓存 ==号详解
    java——包装类中的equals方法
    Eclipse怎么改变@author 姓名
    非常简约学生管理系统——HashSet进行编写
    TreeMap——实现comparable接口并重写CompareTo方法
    flume收集日志直接sink到oracle数据库
    大文件多个服务器复制拷贝
    oracle创建用户表空间
    缓存策略:redis缓存之springCache
  • 原文地址:https://www.cnblogs.com/t-road/p/13055355.html
Copyright © 2011-2022 走看看