一.前言
-
Location 指令是http模块中的配置指令之一,Location是Nginx中的块级指令(block directive),通过配置Location指令块,可以决定客户端发过来的请求URI如何处理(是映射到本地文件还是转发出去)及被哪个location处理
-
Nginx的location就相当于url路由,Nginx根据location的配置来决定究竟如何处理一个请求
二.location语法
1.语法规则
- = 开头表示精确匹配
- ^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可(非正则)
- ~ 开头表示区分大小写的正则匹配
- ~* 开头表示不区分大小写的正则匹配
- / 通用匹配,任何请求都会匹配到
三.优先级测试
1.location参数匹配解释
1.1 “=” 精确匹配
内容要求表达式完全一致才匹配成
location = /abc/ {
.....
}
# 只匹配http://abc.com/abc
#http://abc.com/abc [匹配成功]
#http://abc.com/abc/index [匹配失败]
1.2 “^~” 表示普通字符串匹配上以后不再进行正则匹配
location ^~ /index/ {
.....
}
#以 /index/ 开头的请求,都会匹配上
#http://abc.com/index/index.page [匹配成功]
#http://abc.com/error/error.page [匹配失败]
1.3 “~” 执行正则匹配,区分大小写
location ~ /Abc/ {
.....
}
#http://abc.com/Abc/ [匹配成功]
#http://abc.com/abc/ [匹配失败]
1.4 “~*” 执行正则匹配,忽略大小写
location ~* /Abc/ {
.....
}
# 则会忽略 uri 部分的大小写
#http://abc.com/Abc/ [匹配成功]
#http://abc.com/abc/ [匹配成功]
1.5 “/” 不加任何规则时,默认是大小写敏感,前缀匹配
location /index/ {
......
}
#http://abc.com/index [匹配成功]
#http://abc.com/index/index.page [匹配成功]
#http://abc.com/test/index [匹配失败]
#http://abc.com/Index [匹配失败]
# 匹配到所有uri
2.测试优先级
default_type :默认类型
return :返回
text/html :表示使用html htm shtml解析
return 200 "location /"; :返回给浏览器200状态码,并且打印出"location /"
server区域
server {
listen 80;
server_name location.com;
location / {
default_type text/html;
return 200 "location /";
}
location = / {
default_type text/html;
return 200 "location =";
}
# location ^~ / { # 先注释,否则校验失败,无法重新加载
# default_type text/html;
# return 200 "location ^~";
# }
location ~ / {
default_type text/html;
return 200 "location ~";
}
location ~* / {
default_type text/html;
return 200 "location ~*";
}
}
优先级
# 优先级最高的符号 =
[root@tdm ~]# curl location.com
location =
# 注释掉精确匹配,重启nginx
[root@tdm ~]# curl location.com
location ^~
# 注释掉^~,重启nginx
[root@tdm ~]# curl location.com
location ~
#注释掉~,重启nginx
[root@tdm ~]# curl location.com
location ~*
3.结论
匹配符 | 匹配规则 | 优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则表达式 | 4 |
/ | 通用匹配,任何请求都会匹配到 | 5 |