最近一直在做location的配置,遇到优先级别问题(如有配置不当,会存在安全隐患),以下是个人的一些学习体会

一、location 匹配符

1.等于匹配符:      ##“=

其特点可概括为两点:   ##.精确匹配,.不支持正则表达式

语法示例:

     location = /static/img/file.jpg {

     ...

     }

Code-1

2.空  匹配符: 空匹配符的特点是:   ##.匹配以指定模式开始的URI,.不支持正则

语法示例:

     location /static/img/ {

     ...

     }

Code-2

3.正则匹配符: “~”     ##区分大小写的正则匹配

语法示例:

     location ~ /static/img/.*\.jpg$ {

     ...

     }

Code-4

4.~*  表示:    ##不区分大小写的正则匹配,但是一些对大小写不敏感的系统,这两者没区别。

语法示例:

     location ~* /static/img/.*\.jpg$ {

     ...

     }

Code-5

5.^~  表示:    ##优先前缀匹配

 location ^~/static/img/ {

 ...

 }

Code-6

6.内部访问符 @  表示:    ##一般用于错误页面

二、匹配优先级

1.=

2.空匹配符,满足精准匹配时

3.^~

4.~或~*

对于请求http://luck.com/static/img/test.jpg

1.如命中精确匹配,例如:

     location = /static/img/logo.jpg {

     }

Code-7

则优先精确匹配,并终止匹配。

2.如果命中多个 空 匹配,例如:

     location /static/ {

     }

     location /static/img/ {

     }

Code-8

则记住最长的前缀匹配,即上例中的/static/img/,并继续匹配。

3.如果最长的前缀匹配是优先前缀匹配,例如:

     location /static/ {

     }

     location ^~ /static/img/ {

     }

Code-9

则命中次最长的优先最长匹配,并终止匹配

4.如果命中多个正则匹配,例如:

     location /static/ {

     }

     location /static/img/ {

     }

     location ~* /static/ {

     }

     location ~* /static/img/ {

     }

Code-10

则忘记上述 2 中的最长前缀匹配,使用第一个命中的正则匹配,即上例中的 location ~* /static/ ,并终止匹配(命中多个正则匹配,优先使用配置文件中出现次序的第一个)

三、实战经验总结
1.location 匹配的优先级(来自实践总结)
(location =) -> (location 完整路径) ->(location ^~ 路径) ->(location ~* 正则) ->(location 路径)
只要匹配到,其它的都会忽略,然后返回到改匹配。

nginx之location匹配优先级和安全问题的更多相关文章

  1. Nginx之Location匹配规则

    概述 经过多年发展,nginx凭借其优异的性能征服了互联网界,成为了各个互联网公司架构设计中不可获取的要素.Nginx是一门大学问,但是对于Web开发者来说,最重要的是需要能捋的清楚Nginx的请求路 ...

  2. Nginx之location 匹配规则详解

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

  3. Nginx 配置 Location 规则优先级问题

    nginx 的 location与配置中 location 顺序没有关系,与 location 表达式的类型有关.相同类型的表达式,字符串长的会优先匹配. 以下是按优先级排列说明: 等号类型(=)的优 ...

  4. Nginx中location匹配及rewrite重写

    目录 一.常用的Nginx正则表达式 二.location 2.1.location三类匹配类型 2.2.常用的匹配规则 2.3.location优先级 2.3.1.举例说明 2.4.实际网站使用中, ...

  5. nginx中location匹配顺序

    一.location语法 语法: Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: - ...

  6. Nginx的location匹配规则

    一 Nginx的location语法 location [=|~|~*|^~] /uri/ { … } =         严格匹配.如果请求匹配这个location,那么将停止搜索并立即处理此请求 ...

  7. 测试Nginx中location的优先级!(重点)

    location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ~ 开头表示区分大小写的正则匹配 ~* 开头表示不区分大小写的正则匹配 ^~ 开头表示uri以某个常规字符串开头 ...

  8. Nginx使用Location匹配URL进行伪静态

    基础知识 Nginx location 配置语法 1. location [ = | ~ | ~* | ^~ ] uri { ... } 2. location @name { ... } locat ...

  9. nginx的location匹配

    http://www.cnblogs.com/lidabo/p/4169396.html 这个博主写的非常好 location: 先匹配普通location,再匹配正则表达式 1.而且选择了最大前缀匹 ...

随机推荐

  1. 安卓开发树形控件之ExpandableListView(一)

    这个例子非常简单,简单到一个初学者都能随便开发出来,今天的目的仅仅只是为了将效果实现出来,如果想深入这里有几篇非常不错的博客: Android 之ExpandableListView几个特殊的属性 h ...

  2. Redis五种基本数据结构

    1.字符串 示例: 2.列表 示例: 3.集合 示例: 4.散列 示例: 5.有序集合 待续...

  3. MySQL Performance-Schema(三) 实践篇

    前一篇文章我们分析了Performance-Schema中每个表的用途,以及主要字段的含义,比较侧重于理论的介绍.这篇文章我主要从DBA的角度出发,详细介绍如何通过Performance-Schema ...

  4. Mac配置PHP

    前言 在MacOS中已经内置了PHP和Apache,所以不需要再额外安装它们,只需要简单几步即可运行PHP. 配置Apache 查看Apache版本: $ sudo apachectl -v 终端关闭 ...

  5. python-函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...

  6. (转)浅谈Java中的对象和对象引用

    原文地址: http://www.cnblogs.com/dolphin0520/p/3592498.html 在Java中,有一组名词经常一起出现,它们就是"对象和对象引用",很 ...

  7. 安全测试 - 端口嗅探工具Nmap

    Nmap 在官网下载nmap端口检测工具https://nmap.org/,nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端. 使用: 通过cmd命令:nmap www.5i5j.c ...

  8. [LeetCode] Strong Password Checker 密码强度检查器

    A password is considered strong if below conditions are all met: It has at least 6 characters and at ...

  9. 在.NET中把项目从类库转为Web应用程序

    我们知道,在.NET中所有的项目文件以.csproj为扩展名.内容是xml格式. 类库项目文件.csproj: <Project DefaultTargets="Build" ...

  10. Mysql基本语句的总结

    1---------------创建一个表------------------------------------ drop table if exists 表名 create   table 表名( ...