修饰符
官方文档
Location大致有5种修饰符
修饰符 | 含义 | 优先级 |
---|---|---|
= | 精确匹配(必须全部相等) | 1 |
^~ | 只需匹配uri部分,不支持正则表达式 | 2 |
~ | 大小写敏感(正则表达式) | 3 |
~* | 忽略大小写(正则表达式),这里要注意忽略大小写的意思是请求的字符大小写都可以,但是不会进行大小转换,请求的大小写对应的文件必须存在。 | 4 |
/ | 通用匹配,任何请求都会匹配到 | 5 |
@ | 内部服务跳转 |
修饰符案例
接下来就对着几种修饰符进行判断优先级
# 通过配置return来返回数据,进行测试(匹配规则为"=">"^~">"~*">"~">/)
# 正常的匹配
location / {
return 200 "this is $request_uri \n";
}
# 精准匹配(优先级高于/)
location = /q/aaa {
return 200 "this is = $request_uri \n";
}
# 模糊匹配
location ~ \.(jpg|png)$ {
return 200 "this is ~ \.jpg \n";
}
# 如果"~*"该匹配规则在"~"上面,那么"~"就失效了,所有的相关配置都会被"~*"拦截
location ~* \.(jpg|png)$ {
return 200 "this is ~* \.jpg \n";
}
# ^~ 只会匹配/下的images,访问路径中如果出现类似/aaa/images,是不会被该匹配规则获取的
location ^~ /images {
return 200 "this is ~* /images \n";
}
# 测试
[root@node-3 conf]# curl 127.0.0.1/q/aaa
this is = /q/aaa
[root@node-3 conf]# curl 127.0.0.1/das
this is /das
[root@node-3 conf]# curl 127.0.0.1/1.jpg
this is ~ \.jpg
# 匹配.jpg和.png结尾的,~会优先获取到,但是如果是大写的,那么就是/先匹配到
[root@node-3 conf]# curl 127.0.0.1/1.JPG
this is /1.JPG
# 可以在location中配置匹配~*来忽略大小写
[root@node-3 conf]# curl 127.0.0.1/1.JPg
this is ~* \.jpg
# 一下三个是location配置^~后的效果
[root@node-3 conf]# curl 127.0.0.1/images/1.jpg
this is ^~ /images
[root@node-3 conf]# curl 127.0.0.1/aa/images/dszxc/1.jpg
this is ~* \.jpg
[root@node-3 conf]# curl 127.0.0.1/aa/images/dszxc/1
this is /aa/images/dszxc/1