location 常用匹配规则
符号 | 类型 | 含义 |
---|---|---|
= | 精确匹配 | 进行普通字符完全匹配 |
^~ | 前缀匹配 | 表示普通字符匹配。如果匹配成功,则不再匹配其他location |
~ | 正则匹配 | 匹配大小写的匹配 |
~* | 正则匹配 | 不区分大小写的匹配 |
!~ | 正则匹配 | 区分大小写的匹配取非 |
!~* | 正则匹配 | 不区分大小写的匹配取非 |
匹配优先级规则
-
首先看优先级:精确 > 前缀 > 正则 > 一般匹配(不带任何修饰的前缀匹配) > 通用匹配
即
(location = 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (location /)
-
如果优先级相同:正则匹配看上下顺序,上面的优先;而一般匹配看长度,最长匹配的优先
例子讲解
例子 | 类型 | 是否继续搜索 | 解释 |
---|---|---|---|
location = / {} | 精确匹配 | 否 | 主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配 |
location / {} | 通用匹配 | 是 | 将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配, 但若后面是正则表达式会和最长字符串优先匹配(最长匹配) |
location /documents/ {} | 一般匹配 | 是 | 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location 只有其它 location后面的正则表达式没有匹配到时,才会采用这一条 |
location /documents/abc {} | 一般匹配 | 是 | 匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location 只有其它 location后面的正则表达式没有匹配到时,才会采用这一条 |
location ^~ /images/ {} | 前缀匹配 | 否 | 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条 |
location ~* .(gif|jpg|jpeg)$ {} | 正则匹配 | 否 | 匹配所有以 gif、jpg或jpeg 结尾的请求 但如果和前一个例子一起使用,那么所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则 |
location /images/abc {} | 一般匹配 | 是 | 最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在 |
location ~ /images/abc {} | 正则匹配 | 否 | 匹配以/images/abc 开头的 如果和 location ^~ /images/ 一起使用, 将不会到达这一条 |
location /images/abc/1.html {} | 一般匹配 | 是 | 匹配/images/abc/1.html 文件,如果和正则location ~ /images/abc/1.html 相比,正则优先级更高 |
实际场景常用
location = / {
root html;
index index.html index.htm;
}
location ^~ /static/ {
root /webroot/static/;
}
location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
location /app/ {
proxy_pass http://tomcat_server;
}
网友评论