语法规则: location [=|~|~*|^~] /uri/ { … }

=:开头表示精确匹配

^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/test,可以被规则^~ /static/ /test匹配到(注意是空格)。

~开头表示区分大小写的正则匹配

~*开头表示不区分大小写的正则匹配

!~!~*分别为区分大小写不匹配及不区分大小写不匹配的正则

/通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为:

首先匹配=,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

例如:


访问根目录/, 比如http://localhost/ 将匹配规则A

访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H

访问 http://localhost/static/a.html 将匹配规则C

访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而 http://localhost/static/c.png 则优先匹配到规则C

访问 http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。

访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。

访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。

实际应用中最好最少有三个匹配规则:

#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
location = / {
  proxy_pass http://localhost:8080/index
}
# 第二个必选规则是处理静态文件请求
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
  root /home/web/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|ico)$ {
  root /home/web/images/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
location / {
  proxy_pass http://localhost:8080/
}

ngix匹配规则的更多相关文章

  1. 在JaveWeb项目中配置Spring 匿名访问时,匹配规则的变相实现/*

    实现/* /** * 根据当前的URL返回该url的角色集合. * 1.如果当前的URL在匿名访问的URL集合当中时,在当前的角色中添加匿名访问的角色(SysRole.ROLE_CONFIG_ANON ...

  2. Web.xml中设置Servlet和Filter时的url-pattern匹配规则

    一.servlet容器对url的匹配过程: 当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://loca ...

  3. Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

    Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...

  4. servlet的匹配规则,兼谈/与/*

    客户端通过URL地址访问服务器(servlet容器)资源,所以servlet若要能对外提供服务,必须要将程序按照java规范将其映射到对应的URL上,映射的规则是需要开发人员在WEB.XML中显示指定 ...

  5. Windows Store App 全球化 资源匹配规则

    上面几个小节通过示例介绍了如何引用资源以及设置应用语言来显示不同语言的信息,这些示例都只是添加了简体中文和英语两种语言来显示资源,而在一些复杂的应用程序中,字符串资源可能会被定义成多种语言,文件资源也 ...

  6. Nginx之location 匹配规则详解

    有些童鞋的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通, ...

  7. Nginx localtion匹配规则

    mark:2016年05月25日13:20:54 (存手打,拒绝转载) 一.location分为 普通location 和 正则location 只有带有 "~" 或者" ...

  8. Intent 匹配规则

    1.在AndroidManifest.xml中可以为 每个 Activity,Service 设置多个Intent-Filter; 在系统启动和程序安装之后,android会收集AndroidMani ...

  9. Spring3 url匹配规则

    Spring3 url匹配规则 Wildcard Description ? 匹配任何单字符 * 匹配0或者任意数量的字符 ** 匹配0或者更多的目录 宝贝网址:

随机推荐

  1. Java容器——List接口

    1. 定义 List是Collection的子接口,元素有序并且可以重复,表示线性表. 2. 常用实现类 ArrayList:它为元素提供了下标,可以看作长度可变的数组,为顺序线性表. LinkedL ...

  2. javascript设计模式阅读后的感悟与总结

    单例模式 用于创建唯一的一个对象. 核心在于一个判断 var index if(index){ return index; } init(); 这样只会在第一次的时候初始化创建对象,以后都不会再创建对 ...

  3. python,pip环境变量设置

    安装好python后,配置环境变量. 安装pygame需要先配置两个环境变量. 第一个是python的.先打开计算机,然后点击‘系统属性’然后点击‘高级系统设置’然后点击‘环境变量’在系统变量中找到p ...

  4. 聊聊大学期间的我是怎样学习Linux系统的

    高考成绩并不是那么的理想,本科是个普通的二本院校,来到学校之后,整个人其实很迷茫,当时对大学的专业真的是一点都不了解,也不知道自己对哪方面感兴趣,最后选择的专业是电子方面的,其实当时选择专业的时候对电 ...

  5. 软工作业PSP与单元测试训练

    任务说明(二选一): 一.实现模块判断传入的身份证号码的正确性: 二.实现模块判断传入的电子邮箱账号的正确性: 选择任务二: 实现要求: 一.实现功能模块: 1. 判断邮箱地址是否为空: 2. 判断邮 ...

  6. [tour]2019HUST onsite签到

    先定一个小目标,从签到题开始讲清楚 虽然因为我喜欢签到题的气球导致签到题并没有行使责任.. F.Mesh 和某CF题(我找不到了)完 全 一 致,由于某些玄学原因没有get到(orz谢罪) 给出一个6 ...

  7. Ubuntu18.04安装常用软件

    一.VMwareWorkstation 1.到官网下载VmwareWorkstation,选择Linux版本 2.将下载下来的安装包放到桌面给予x权限,通过命令行进入到桌面的目录sudo ./执行安装 ...

  8. java AQS(AbstractQueuedSynchronizer)同步器详解

    除了内置锁(synchronized)外,java AQS(AbstractQueuedSynchronizer)同步器几乎是所有同步容器,同步工具类的基础.ReentrantLock.Reentra ...

  9. 'weinre' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方案

    使用 npm install -g weinre 全局安装 weinre,weinre 安装目录是:C:\Users\Administrator\AppData\Roaming\npm 需要配置环境变 ...

  10. JDBC Request

    1.下载jdbc驱动,放至jmeter安装目录的lib目录和lib\ext目录下 PS:自己操作的时候,由于JDBC Connection Configuration中驱动名称写错,前面多了一个空格, ...