nginx location 优先级

location 指令是 http 模块当中最核心的一项配置,根据预先定义的 URL 匹配规则来接收和处理用户的请求。

location 匹配语法

精确匹配

location = /images/a.png {
...
}

前缀匹配

普通前缀匹配

location /images/blog/ {
...
}

优先前缀匹配

location ^~ /images/blog/ {
...
}

正则匹配

区分大小写

location ~ .*\.php {
...
}

不区分大小写

location ~* .*\.PHP {
...
}

取反(区分大小写)

location !~ .*\.php {
...
}

取反(不区分大小写)

location !~* .*\.PHP {
...
}

location 匹配优先级

对于请求 https://www.zfl9.com/images/blog/php7.png

若命中精确匹配,如

location = /images/blog/php7.png {
...
}

则优先精确匹配,并终止匹配

若命中多个前缀匹配,如

location /images/ {
...
}
location /images/blog/ {
...
}

则暂存最长前缀匹配,并继续搜索正则匹配

若命中最长优先前缀匹配,如

location /images/ {
...
}
location ^~ /images/blog/ {
...
}

则命中最长优先前缀匹配,并终止匹配

若命中多个正则匹配,如

location /images/ {
...
}
location /images/blog/ {
...
}
location ~ /images/ {
...
}
location ~ /images/blog/ {
...
}

则按照配置文件的上下顺序匹配第一个正则,并终止匹配

若命中最长前缀匹配后没有搜索到正则,如

location /images/ {
...
}
location /images/blog/ {
...
}

则命中最长优先前缀匹配,并终止匹配