最近一直在做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 路径)
只要匹配到,其它的都会忽略,然后返回到改匹配。

最新文章

  1. 【JAVA并发编程实战】3、同步容器
  2. mysql 线上not in查询中的一个坑
  3. HTML标签自定义属性(转)
  4. delphi 基础之二 面向对象概念初步
  5. Spring学习总结四——SpringIOC容器四
  6. POJ 3233 矩阵乘法
  7. 从 Java 代码逆向工程生成 UML 类图和序列图
  8. 整理SVN代码-->正式环境的代码
  9. 在Eclipse中搭建C/C++环境
  10. HDFS Block Replica Placement实现原理
  11. BZOJ 3529 数表(莫比乌斯反演)
  12. 为什么windows dos和Linux shell有这样的差别??
  13. php RAS加密类代码
  14. python多线程和多进程
  15. 帝国cms中当调用当前信息不足时,继续取其他数据
  16. ssl握手数据结构
  17. PAT L2-023 图着色问题
  18. List和json数组的转换(赋源代码)
  19. day05 --class --home
  20. Asp.Net MVC Identity 2.2.1 使用技巧(八)

热门文章

  1. maven 打包含有第三方依赖的 jar 包
  2. ASP.NET MVC 3 网站优化总结(三)Specify Vary: Accept-Encoding header
  3. 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。
  4. 升级 python 2.6.6 系统到 2.7.10 版本
  5. css3
  6. 初识Android Studio
  7. [LeetCode] Sudoku Solver 求解数独
  8. python基础-面向对象进阶
  9. Android App的设计架构:MVC,MVP,MVVM与架构经验谈
  10. jq方法中 $(window).load() 与 $(document).ready() 的区别