nginx的location的优先级和匹配方式
在http模块中有server,server模块中有location,location匹配的是uri
在一个server中,会有多个location,如何来确定匹配哪个location
niginx的正则表达式
^ 字符串的起始位置
$ 字符串的结束位置
* 匹配所有
+ 匹配前面的字符最少一次
? 匹配前面的字符0次或者1次
. 任意单个字符
{n} 连续重复出现n次
{n,m} 连续重复出现n到m次
[c] 匹配单个字符c
() 分组
| 或
location匹配的分类:
location /
location ~*
1、精确匹配location = /test{...}
完整的路径,一个字不能少,一个字不能错
2、正则匹配location ~/{}
location ^~ 前缀匹配,以什么为开头
location ~ 区分大小写进行匹配
location ~* 不区分大小写进行匹配
!~ 区分大小写取反匹配
!~* 不区分大小写取反匹配
3、一般匹配location /test{}
location匹配一旦匹配成功,就不再向下匹配
location匹配的优先级
大致:【精确匹配 > 正则匹配 > 一般匹配】
具体:【location = 完整路径 > location ^~ > location ~,~* > location /test > location /】
精确匹配,优先级最高
其次是正则匹配
↓
一般匹配优先级最低
工作中配置location的原则:
1、网站首页
(一般都是静态页面):都是精确匹配(匹配网站的根工作目录)
location =/{
}
2、处理静态文件的请求
目录匹配和后缀匹配
location ^~ /static {
}
location ~* \.{html|jpg|jpeg|gif|png} $ {
}
3、一般规则
动态请求,把动态请求转发到后端
location /{
proxy_pass http://tomcat_server;
}