Nginx location 学习

location的基本语法

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

模式 含义
location = /uri = 表示精确匹配,只有完全匹配上才能生效
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern 开头表示区分大小写的正则匹配
location ~* pattern 开头表示不区分大小写的正则匹配
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后
location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default

多个location配置的情况下的匹配顺序

  1. 首先精确匹配 =
  2. 其次前缀匹配 ^~
  3. 其次是按文件中顺序的正则匹配
  4. 然后匹配不带任何修饰的前缀匹配。
  5. 最后是交给 / 通用匹配
  6. 当有匹配成功时候,停止匹配,按当前匹配规则处理请求

例子

location  =/ {
    #规则A
    return 601;
}        

location  / {
    #规则B
    return 602;
}        

location /documents/ {
    #规则C
    return 603;
}

location ~ /documents/Abc {
    #规则D
    return 604;
}

location ^~ /images/ {
    #规则E
    return 605;
}
        
location ~* \.(gif|jpg|jpeg)$ {
    #规则F
    return 606;
}
        
location /images/abc {
    #规则G
    return 607;
}

location ~ /images/abc/ {
    #规则H
    return 608;
}

按照上面的匹配规则,匹配的效果如下

/ 601 精确完全匹配,即使/index.html也匹配不了
/login/login.html 602 匹配B以后,往下没有任何匹配
/documents/document.html 603 匹配C以后,往下没有任何匹配
/documents/Abc.jpg 604 最长匹配到C,往下正则顺序匹配到D,不会往下到F
/images/1.gif 605 最长匹配到E,不会往下到F
/photo/screen.jpg 606 匹配F以后,往下没有任何匹配
/images/abc.jpg 606 正则匹配优先于不带任何修饰的前缀匹配,匹配F以后,不会往下到H
/images/abc.html 607 匹配H以后,往下没有任何匹配
/images/abc/test.png 608 正则匹配优先于不带任何修饰的前缀匹配,匹配H以后,往下没有任何匹配

猜你喜欢

转载自blog.csdn.net/Derek_Yam/article/details/81222405