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. 【长 PI】

    /* 长 PI 说明: 圆周率后的小数位数是无止境的,如何使用电脑来计算这无止境的小数是一些数学家与程式设计师所感兴趣的,在这边介绍一个公式配合 大 数运算,可以计算指定位数的圆周率. 解法 : 首先 ...

  2. DevExpress控件之RepositoryItemComboBox

    RepositoryItemComboBox在嵌入到GridView后,如何获取当前所选的Item? 直接代码: ((RepositoryItemComboBox)gridView.Columns[& ...

  3. apche基于域名,ip,端口的配置

    基于域名的服务端: 13 iptables -F 14 setenforce 0 15 ifconfig eth0 172.18.43.146 16 yum -y install bind bind- ...

  4. UINavigationController实现全屏滑动返回功能

    说明: UINavigationController默认在push出的控制器中都有边沿滑动返回功能,但是只能从屏幕左边滑才能返回,若从屏幕中间画并没有效果.下面实现全屏滑动功能. 探究: 系统默认能够 ...

  5. java 文件操作 读取txt文本(兄弟常开心)

    测试一下读取文本的另一种方法:该方法只使用一个类读取了文件 注意:buffer和read方法中读取指定长度的一致 package com.swust; import java.io.*; /* * 数 ...

  6. 中国大学MOOC中的后台文件传输

    早期版本的中国大学MOOC一旦被挂起后,应用在完成当前下载任务后无法继续添加新任务,当然也无法将缓存状态写入数据库.这个问题能否顺利解决直接关系到用户体验. 顺便吐槽下,凡是使用了后台文件传输还提示你 ...

  7. CREELINKS平台_处理器CeAd资源使用说明(CeAd的配置与使用)

    0x00 CREELINKS平台简介     CREELINKS(创e联)是由大信科技有限公司研发,集合软硬件.操作系统.数据云储存.开发工具于一体,用于物联网产品的设计.研发与生产的平台.    平 ...

  8. jquery实现显示和隐藏toggle()方法的使用

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. mac os x在PC上安装

    系统安装之前的准备工作及安装过程简介 前面我们已经提到,苹果电脑虽然已经采用了x86架构的Intel处理器,但其官方并不提供在非苹果电脑上安装Mac OS的支持.所以,要想在普通PC/笔记本电脑上安装 ...

  10. http服务搭建

    http服务器搭建 主配置文件在 /etc/httpd/conf/httpd.conf 安装http  yum install httpd -y 启动http服务器  systemctl start ...