location匹配的是nginx的哪个变量?

$request_uri

location的匹配种类有哪些?

格式  location [ 空格 | = | ~ | ~* | !~ | !~* ] /uri/ {}

# 精确匹配: 相等(=)
# 字符串匹配: 字符串匹配(空格) 匹配开头(^~)
# 正则匹配: 区分大小写匹配(~) 不区分大小写匹配(~*) 区分大小写不匹配(!~) 不区分大小写不匹配(!~*)

location搜索优先级优先级如何?

精确匹配 > 字符串匹配( 长 > 短 [ 注: ^~ 匹配则停止匹配 ]) > 正则匹配( 上 > 下 )

# 精确匹配只能命中一个
# 字符串匹配使用匹配最长的最为匹配结果
# 正则匹配按照location定义的顺序进行匹配,先定义具有高优先级

特别注意: 字符串匹配优先搜索,但是只是记录下最长的匹配 ( 如果 ^~ 是最长的匹配,则会直接命中,停止搜索正则 ),然后继续搜索正则匹配,如果有正则匹配,则命中正则匹配,如果没有正则匹配,则命中最长的字符串匹配.

举例说明

( 这里使用了 echo-nginx-module 模块,方便做输出测试 )

精确匹配

location = /images/test.png {
echo 'config1';
} location /images/test.png {
echo 'config2';
} location \/images\/test\.png$ {
echo 'config3';
}
如果此时请求 http://127.0.0.1/images/test.png 会输出什么呢?
输出 config1, 毋容置疑,精确匹配优先级最高!

精确匹配的特殊情况

location = / {
index index.html;
} location / {
echo 'config2';
} 此时是输入http://127.0.0.1 会输出什么呢?
是输出 config2, 怎么精确匹配的优先级不灵了呢?
是这样的,精确匹配还是起作用了,请求目录(非具体文件),nginx会将请求内部定向到index文件,
既此时真正的请求是http://127.0.0.1/index.html, 这是 config2则被命中!
所以精确匹配不要用来匹配 /

字符串搜索与正则搜索

location /images/test.png {
echo 'config1';
} location ^~ /images/ {
echo 'config2';
} location ~ \/images\/test\.png$ {
echo 'config3';
} location ~ \/images\/ {
echo 'config4';
} 如果此时请求 http://127.0.0.1/images/test.png 会输出什么呢?
当然是 config3,正则命中
(虽然 config1 为最长匹配的字符串,此时只做记录,后面还要搜索正则匹配,则config3正则匹配命中),
仔细观察可以发现config4也被匹配成功了,但是正则的匹配顺序是按照location的定义顺序匹配的,所以config3命中.

字符串匹配优先级的提升( ^~ )

location /images/ {
echo 'config1';
} location ^~ /images/test.png {
echo 'config2';
} location ~ /images/test\.png$ {
echo 'config3';
} location ~ \/images\/ {
echo 'config4';
} 如果此时请求 http://127.0.0.1/images/test.png 会输出什么呢?
当然是config2, 首部匹配命中
(因为字符串匹配是优先搜索的,此时发现config2 为最长的字符串匹配且为^~匹配方式,所以停止搜索正则,直接命中!) # 所以这里的 ^~ 符号比较特殊,就是为了提高字符串匹配的优先级,优先于正则匹配.

【转】nginx配置:location配置方法及实例详解的更多相关文章

  1. nginx配置:location配置方法及实例详解

    今天深入研究了下nginx的location的用法,已经一些需要注意的细节,现在做一个归纳总结,以备后面查询. location匹配的是nginx的哪个变量? $request_uri locatio ...

  2. jQuery中on()方法用法实例详解

    这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能及各种常见的使用技巧,并对比分析了与bind(),live(),delegate()等方法的区别,需要的朋友可以参考下 本 ...

  3. 【转】【Centos】nginx配置:location配置方法及实例详解

    location匹配的是nginx的哪个变量? $request_uri location的匹配种类有哪些? 格式 location [ 空格 | = | ~ | ~* |^~ | !~ | !~* ...

  4. 【配置属性】—Entity Framework实例详解

    Entity Framework Code First的默认行为是使用一系列约定将POCO类映射到表.然而,有时候,不能也不想遵循这些约定,那就需要重写它们.重写默认约定有两种方式:Data Anno ...

  5. 【配置关系】—Entity Framework实例详解

    实体间的关系,简单来说无非就是一对一.一对多.多对多,根据方向性来说又分为双向和单向.Code First在实体关系上有以下约定: 1. 两个实体,如果一个实体包含一个引用属性,另一个实体包含一个集合 ...

  6. nginx的location、rewrite玩法详解

      1. location正则写法 一个示例: 1234567891011121314151617181920212223242526272829303132333435363738394041424 ...

  7. 数据库 | SQL语法优化方法及实例详解

    使用复合索引 如果经常执行如上查询,那么建立三个单独索引不如建立一个复合索引,因为三个单独索引通常数据库每次执行只能使用其中一个,虽然这样比不使用索引而进行全表扫描提高了很多效率,但使用复合索引因为索 ...

  8. nginx的location配置root、alias用法和区别

    root & alias区别root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上root的处理结果是:root路径 ...

  9. Nginx 的 Location 配置指令块

    最近一段时间在学习 Nginx ,以前一直对 Nginx 的 Location 配置很头大,最近终于弄出点眉目.总结如下:nginx 配置文件,自下到上分为三种层次分明的结构: |    http b ...

随机推荐

  1. HTML5常用标签分类

    1.行级元素标签:a.span.sup.sub.em.b.big.i.strong 2.块元素标签:div.p.h1~h6.ul.ol.li.table.form.article.footer.hea ...

  2. 在LINUX上创建GIT服务器

    转载 如果使用git的人数较少,可以使用下面的步骤快速部署一个git服务器环境. 1. 生成 SSH 公钥 每个需要使用git服务器的工程师,自己需要生成一个ssh公钥进入自己的~/.ssh目录,看有 ...

  3. jstl__报错

    1.缺少JAR:解决的办法就是手动将jstl.jar和 standard.jar这两个jar包加入到web项目的WEB-INF/lib目录中或者是把jstl.jar.standard.jar复制到to ...

  4. js里的神奇双引号的长度

    "和"这两个引号(注意不是和字,是两侧的两个引号),你看出什么区别了么? 一个是复制进来的,另外一个是写上的,应该是半角英文了? "".length " ...

  5. C# 基于DotRas的VPN管理

    由于工作环境有部分网址被公司屏蔽,特意做了个VPN管理工具,在想访问公司被屏蔽的网址时就开启连接,不用时就关掉.对于做安卓开发的或者.net core类库更新还是很方便的,现在把运行效果展示一下: 点 ...

  6. Win10+Ubuntu16.04双系统安装

    硬件工具: 一台PC 一个U盘(8GB以上) Win10安装(已经装好Win10的小朋友们请无视): 准备工作: 下载Win10升级助手 保证系统盘有8GB以上剩余空间 安装步骤(由于安装过程中未记录 ...

  7. vb.net 总结

    vb.net 可以说是vb6.0的升级版,在语法结构上与vb很相似.那么,我们就来说一下它们之间有什么不同的地方吧. vb6.0          vb是我们入门的一个非常好的编程软件,它可以实现软件 ...

  8. matlab for循环应用(阶乘及the day of year)

    一.N的阶乘 %脚本文件:test.m %N的阶乘 使用举例 % 定义变量 % ii ---循环变量,也就是循环次数 % N ---N的阶乘 % N_factorial --计算N的阶乘 clc;cl ...

  9. java字符串比较及小数浮点型的使用

    import java.text.DecimalFormat; /* * 小数类型的常量默认是double类型,声明float类型的常量需要使用F作为后缀. * * 关于equals()和==: 对于 ...

  10. CSS3中选择器

    ::selection选择器 <style type="text/css"> .selectColor::selection{color:#fff;background ...