Nginx路由匹配规则

说明


内容来源:同事的分享

语法


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

前缀类型


  1. 字符串匹配

  2. 正则表达式匹配(*)

字符串前缀


  1. =

  2. ^~

# 1) =     
location = / {
oroot/home/www/myblog;
    index index.html;
}
# 2)[空]                                        
location /api {
oproxy_passhttp://45.77.1.11:8001;
}
# 3)^~                                          
location ^~ /check {
oproxy_passhttp://45.77.1.11:8001;
}

正则表达式


  1. ~*不区分大小写

  2. ~区分大小写

# 1) ~*     
location ~* /Api/ {
    expire 30d;
    proxy_pass      http://45.71.9.2:8001;
}

# 2)~                                       
location ~* /api/ {
    expire 30d;
    proxy_pass      http://45.71.9.2:8001;
}

路由匹配顺序


文字描述

1)首先查找匹配字符串的location,nginx会遍历所有的字符串location,记录下匹配中的最长location。

-查找过程中如果遇到存在相等location(=),命中,查找终止。

-查找完毕,如果最长匹配带修饰符“^~”,命中,查找终止。

2)接着检查正则表达式,按照正则表达式出现的顺序逐个检查,匹配上则终止。没有匹配上则取前面匹配到的最长前缀项。

3) 优先匹配顺序说明

  1. =精确匹配
  2. ^~不匹配正则
  3. 正则匹配
  4. 字符串匹配

image