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的读取顺序是从上到下依次执行的 所以在上方的优先级大于下方的。

posted @ 2022-01-08 16:05  JasonBorn  阅读(1671)  评论(1编辑  收藏  举报