Nginx 关键字优先级排序分析

Nginx配置缓存优先级

nginx的location配置

nginx location语法规则:location [=||*|^~] /uri/ { … }
nginx的location匹配的变量是$uri

符号 说明
= 表示精确匹配
^~ 表示uri以指定字符或字符串开头
~ 表示区分大小写的正则匹配
~* 表示不区分大小写的正则匹配
/ 通用匹配,任何请求都会匹配到

规则优先级

1
=  高于  ^~  高于  ~* 等于 ~  高于  /

规则示例

1
2
3
4
location = "/12.jpg" { ... }
如:
[www.aminglinux.com/12.jpg](http://www.aminglinux.com/12.jpg) 匹配
[www.aminglinux.com/abc/12.jpg](http://www.aminglinux.com/abc/12.jpg) 不匹配
1
2
3
4
location ^~ "/abc/" { ... }
如:
[www.aminglinux.com/abc/123.html](http://www.aminglinux.com/abc/123.html) 匹配
[www.aminglinux.com/a/abc/123.jpg](http://www.aminglinux.com/a/abc/123.jpg) 不匹配
1
2
3
4
location ~ "png" { ... }
如:
[www.aminglinux.com/aaa/bbb/ccc/123.png](http://www.aminglinux.com/aaa/bbb/ccc/123.png) 匹配
[www.aminglinux.com/aaa/png/123.html](http://www.aminglinux.com/aaa/png/123.html) 匹配
1
2
3
4
location ~* "png" { ... }
如:
[www.aminglinux.com/aaa/bbb/ccc/123.PNG](http://www.aminglinux.com/aaa/bbb/ccc/123.PNG) 匹配
[www.aminglinux.com/aaa/png/123.html](http://www.aminglinux.com/aaa/png/123.html) 匹配
1
2
3
4
location /admin/ { ... }
如:
[www.aminglinux.com/admin/aaa/1.php](http://www.aminglinux.com/admin/aaa/1.php) 匹配
[www.aminglinux.com/123/admin/1.php](http://www.aminglinux.com/123/admin/1.php) 不匹配

小常识

1
2
3
有些资料上介绍location支持不匹配 !~,
如: location !~ 'png'{ ... }
这是错误的,location不支持 !~
1
2
如果有这样的需求,可以通过if来实现,
如: if ($uri !~ 'png') { ... }
1
注意:location优先级小于if

nginx location优先级

1
location   /  优先级  比location ~ 要低,也就是说,如果一个请求(如,admin.php)同时满足两个location
1
2
location /admin.php
location ~ \.php admin.php
1
会选择下面的,下面的选择完成后,上面的不会进行选择
1
=  高于  ^~  高于  ~* 等于 ~  高于  /