linux nginx的location详解
nginx 的 location
Nginx中location的作用是根据Url来决定怎么处理用户请求(转发请求给其他服务器处理或者查找本地文件进行处理)。location支持正则表达式,配置十分灵活。我们可以在一个虚拟主机(nginx中的一个server节点)下配置多个location以满足如动静分离,防盗链等需求。
使用Nginx Location可以控制访问网站的路径, 但一个server可以有多个location配置, 多个location的优先级该如何区分。
location语法:location [=|~|~*|^~] /uri/ {… },具体解释如下表:
符号 | 含义 |
---|---|
location = /url | = :开头,表示精确匹配,uri必须完全一致才能匹配成功 |
location ^~ /Purl | ^~:Puri和请求url的开头相同就匹配成功,且不再去匹配正则,也属于普通匹配 |
location /Purl | 普通匹配,Purl和用户请求url的开头相同就匹配成功,如果有多个普通匹配都匹配成功则按最长的 。 如有location /static/,和oaction /static/img/ 当请求是www.mysite.com/static/img/1.jpg时,第二个location匹配的更长,所以和第二个loaction匹配成功。 |
location ~ reg | ~ :区分大小写的正则匹配 |
location ~* reg | ~* :不区分大小写的正则匹配 |
匹配符 | 匹配规则 | 优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 3 |
/ | 通用匹配,任何请求都会匹配到 | 4 |
location案例
通过location案例运用到匹配符来判断优先级。
server {
listen 80;
server_name _;
不区分大小写的正则匹配
location ~* /python {
default_type text/html; # 指定类型
return 200 "Location ~*"; # 返回状态码为200打印location ~*
}
区分大小写的正则匹配
location ~ /Python {
default_type text/html;
return 200 "Location ~";
}
以某个字符串开头
location ^~ /python {
default_type text/html;
return 200 "Location ^~";
}
精确匹配
location = /python {
default_type text/html;
return 200 "Location =";
}
**这里优先级最高的就为 = **
如果把精准匹配 = 注释掉我们再来看一下这个优先级的变化。
**这里就可以看出来优先级的变化为 ^~ **
最后再来测试一下同级别的 ~ 与 ~* : 通过两张图来验证一下
通过上图可以发现 在同级别的(~) 与 (~*) 中 location的读取顺序是从上到下依次执行的 所以在上方的优先级大于下方的。