Nginx的location的常见规则优先级问题

目录
  • 一、Location / 匹配
  • 二、Location = / 匹配

locaiton有四种类型的匹配规则,分别为完全匹配(=)、前缀普通匹配(^~)、正则表达式匹配(~或者~*)、普通匹配

规则

  • 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项
  • 前缀普通匹配(^~)优先级次之。不支持正则表达式。使用前缀匹配,如果有多个location匹配的话,则使用表达式最长的那个
  • 正则表达式类型(~ ~*)的优先级次之。一旦匹配成功,则不再查找其他匹配项
  • 常规字符串匹配,如果有多个location匹配的话,则使用表达式最长的那个

说明

  • 先判断精准命中,如果命中,立即返回结果并结束解析过程
  • 若未结束,判断前缀普通命中,如果有多个命中,使用表达式“最长”的命中结果,结束解析过程
  • 若未结束,继续判断正则表达式的匹配,按正则表达式顺序为准,由上至下一旦匹配成功1个,立即返回结果,并结束解析过程
  • 若未结束,继续普通命中,普通命中和前缀普通命中相似,顺序无所谓,按照location表达式的长短来确定命中结果

Location,用来快速进行资源定位,定义不同方式来处理或解决url请求,一般有:/ , = /, ~, ~* ,^~
优先级是:(location = /)>(localtion^~)>(location ~| ~* )>(location /)
其中,~ 与 ~*,谁在上面先匹配谁.

一、Location / 匹配

# "/" 是直接到nginx发布目录/usr/local/nginx/html/里来查资源,比如location.html
location / {
        root   html;
        index  index.html index.htm;
    }

在发布目录里创建location.html文件,内容为:this is location.html。
执行172.16.0.9/location.html时,服务器发布目录里找这个location.html文件,并把结果this is loction.html返回出来,如下:

root@backupserver:/usr/local/nginx/html# ls
50x.html  index.html
root@backupserver:/usr/local/nginx/html# echo "this is  location.html" > ./location.html
root@backupserver:/usr/local/nginx/html# ls
50x.html  index.html  location.html
root@backupserver:/usr/local/nginx/html# /usr/local/nginx/sbin/nginx -s reload
root@backupserver:/usr/local/nginx/html# curl 172.16.0.9/location.html
this is  location.html
root@backupserver:/usr/local/nginx/html# 

二、Location = / 匹配

精准定位 一般用来匹配某个文件,优先级高于 /
比如:
在nginx配置文件中增加一个location = / ,定位到/data目录。如下:

server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            autoindex on;
            root   html;
            index  index.html index.htm;
        }
        location = /location.html {
            root /data/;
            index index.html;
        }

重启Nginx服务,测试:
1、先不在/data/目录创建location.html。
可以看到,报404错误。这是因为,= / 优先级高于/ ,服务器去第二个location里寻找location.html这个文件,而不是去第一个location里找。由于第二个location指定的目录是/data,/data目录下没有location.html文件

在/data目录下创建location.html文件

root@backupserver:/usr/local/nginx/html# ls /data/
www
root@backupserver:/usr/local/nginx/html# echo "this is  other location.com" > /data/location.html
root@backupserver:/usr/local/nginx/html# ls
50x.html  index.html  location.html
root@backupserver:/usr/local/nginx/html# curl 172.16.0.9/location.html
this is  other location.com
root@backupserver:/usr/local/nginx/html#

上面可以看到,访问 服务器是,服务器首先去location = /里面找,即使它在另一个location下面。精准匹配优先级是最高的,它不论是在配置文件内容上面还是下面,服务器首先去找精准匹配的内容

除以精准匹配,还有~ ,~* ,^~
~是对大小写敏感,匹配时严格大小写
~* 是对大小写不敏感,匹配时不分大小写。
^~用来匹配以uri开头,匹配成功以后,会停止搜索后面的正则表达式匹配。
以上优先最高的是精准匹配。location = /,其次是:^,然后是 和~* 这两种看准在配置文件内容上面,就先匹配谁,优先级最低的是 /

以上规则在使用nginx时会被广泛使用,比如多台服务器做网站动静分离时:

location ~ .*\.(html|htm|js|css|txt|png|jpg|jpeg|doc)$ {
root html;
}

到此这篇关于Nginx的location的常见规则优先级的文章就介绍到这了,更多相关Nginx location规则优先级内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Nginx配置指令location匹配符优先级和安全问题

    最近一直在做location 配置,遇到优先级别问题(如果配置不当可能存在安全隐患哦),以下是个人学习一点体会. 一. location 的匹配符1.等于匹配符:=等于匹配符就是等号,特点可以概括为两点:精确匹配不支持正则表达式2.空匹配符空匹配符的特点是:匹配以指定模式开始的 URI不支持正则表达式3.正则匹配符:~正则匹配符是可以使用正则表达式的匹配符.不过这里要强调的是,一般来说~是指:区分大小写的正则匹配而~*表示:不区分大小写的正则匹配但是对于一些对大小写不敏感的操作系统,这两者没有区

  • nginx location优先级的深入讲解

    location表达式类型 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配.使用前缀匹配.如果匹配成功,则不再匹配其他location. = 进行普通字符精确匹配.也就是完全匹配. @ "@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files location优先级说明 在nginx的location和配置中location的顺序没有太大关系.正location表达式的类型有关.

  • Nginx配置之location的匹配优先级浅析

    前言 Nginx 配置中的 server 块中的 location 用来匹配请求 URI,以便对不通的 URI 进行不通的处理. location 类型 和 成功匹配的条件 location = expression {} 精准匹配,只有 URI 和 expression 完全相同,才算匹配成功: location expression {} 普通匹配,只要 URI 前部分的字符与 expression 相同就算匹配成功: location ^~ expression {} 普通匹配,只要 UR

  • Nginx的location的常见规则优先级问题

    目录 一.Location / 匹配 二.Location = / 匹配 locaiton有四种类型的匹配规则,分别为完全匹配(=).前缀普通匹配(^~).正则表达式匹配(~或者~*).普通匹配 规则 等号类型(=)的优先级最高.一旦匹配成功,则不再查找其他匹配项 前缀普通匹配(^~)优先级次之.不支持正则表达式.使用前缀匹配,如果有多个location匹配的话,则使用表达式最长的那个 正则表达式类型(~ ~*)的优先级次之.一旦匹配成功,则不再查找其他匹配项 常规字符串匹配,如果有多个loca

  • nginx 配置location匹配规则实例讲解

    nginx的配置指令的作用域可以分为 main,server,location这3个种,实际上这3者不是依次包含的关系,而是相互独立的关系,比如一个只具有main级别作用域的指令,是不能写在某个server或者location内的,模块的某个指令可以同时具有main,server,location这3种作用域,另外每个模块有 main,srv,loc这3个级别的配置,一个模块的main级别的配置对所有的server和location都是共享的,srv级别的配置对所有 location都是共享的,

  • nginx配置location总结location正则写法及rewrite规则写法

    1. location正则写法 首先来看一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/ { # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索 # 只有后面的正则表达式没

  • 一文弄懂Nginx的location匹配的实现

    由于团队在进行前后端分离,前端接管了 Nginx 和 node 层,在日常的工作中,跟 Nginx 打交道的时候挺多的.其中 location 是使用最多和改动最多的地方.之前对 location 的匹配规则是一知半解的.为了搞明白 location 是如何匹配的,特意花了点时间查了些资料,总结此文.希望能给大家带来帮助. 语法规则 location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } 语法规则很简单,一个location

  • Nginx中location匹配以及rewrite重写跳转详解

    目录 前言 一.rewrite跳转实现 二.rewrite执行顺序 三.rewrite跳转场景 四.语法与flg标记说明 五.Nginx常用的正则表达式符号 六.location 1.分类 2.常用匹配规则 3.优先级 4.示例 5.匹配规则定义 总结: 前言 rewrite功能就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记实现URL重写以及重定向例如:更换域名后需要保持旧的域名能够转到新的域名上.某网页发生改变需要跳转到新的页面.网站防盗链等等需求 rewrite只能放

  • Nginx基础location语法及功能配置实例

    这一篇将简单说一下Nginx的location功能. 目录 1.Nginx location1.1.location作用1.2.location语法1.3.location匹配示例1.4.location配置实例1.5.不用uri及特殊字符组合匹配的顺序说明 1.Nginx location 1.1.location作用 location指令的作用就是根据用户请求的URI来执行不同的应用. 1.2.location语法 location [ = | ~ | ~* | ^~ ] uri {...}

  • Nginx配置 location模块实现路由(反向代理、重定向)功能

    目录 前置文章: 匹配规则 proxy_pass 代理转发 root 与 index root 与 alias location 执行过程 rewrite 重定向 前置文章: Linux(CentOS7) 下 Nginx1.15.8 安装步骤 Nginx 的配置文件 nginx.conf 我们访问一个网址,服务器返回对应的资源.那么一个网址是如何对应一个资源的呢?用 Nginx 可以很好地帮我们实现路由功能,我们所有需要做的就是配置好 location 模块. 语法规则 location [=|

  • Nginx中Location配置超详细讲解

    目录 一.语法 二.匹配顺序 三.root 与 alias 的区别 四.server 和 location 中的 root 总结 一.语法 Location 是 Nginx 中一个非常核心的配置,关于Location,举个简单的配置例子: server { listen 80; server_name 10.0.7.115; location / { root /data/app/; index index.html; } } 当访问 http://10.0.7.115:80 的时候,返回的是

  • nginx多location配置实例代码

    目录 前言 nginx常用正则表达式 实测 备注 总结 前言 nginx server下配置多个location根据路径匹的不同做不同的处理. nginx常用正则表达式 语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示:精确匹配. ^~ 开头表示:区分大小写以什么开头. ~ 开头表示:区分大小写的正则匹配. ~* 开头表示:不区分大小写的正则匹配. !~ 和!~*分别表示:区分大小写 不匹配 及不区分大小写 不匹配的正则匹配. / 表示:通用匹配,任何请

  • Nginx服务器的location指令匹配规则详解

    Nginx 中的 Location 指令 是NginxHttpCoreModule中重要指令.Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的"/uri/",可以是字符串或正则表达式.但如果要使用正则表达式,则必须指定前缀. nginx location语法 基本语法:location [=|~|~*|^~] /uri/ { - } = 严格匹配.如果这个查询匹配,那么将停止搜索并立即处理此请求. ~ 为区分大小写匹配(可用正则表达式) ~* 为不区分大小写

随机推荐