zoukankan      html  css  js  c++  java
  • nginx之location匹配优先级和安全问题

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

    一、location 匹配符

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

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

    语法示例:

    1     location = /static/img/file.jpg {
    2 
    3     ...
    4 
    5     }
    Code-1

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

    语法示例:

    1     location /static/img/ {
    2 
    3     ...
    4 
    5     }
    Code-2

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

    语法示例:

    1     location ~ /static/img/.*.jpg$ {
    2 
    3     ...
    4 
    5     }
    Code-4

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

    语法示例:

    1     location ~* /static/img/.*.jpg$ {
    2 
    3     ...
    4 
    5     }
    Code-5

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

    1 location ^~/static/img/ {
    2 
    3 ...
    4 
    5 }
    Code-6

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

    二、匹配优先级

    1.=

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

    3.^~

    4.~或~*

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

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

    1     location = /static/img/logo.jpg {
    2 
    3     }
    Code-7

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

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

    1     location /static/ {
    2 
    3     }
    4 
    5     location /static/img/ {
    6 
    7     }
    Code-8

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

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

    1     location /static/ {
    2 
    3     }
    4 
    5     location ^~ /static/img/ {
    6 
    7     }
    Code-9

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

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

     1     location /static/ {
     2 
     3     }
     4 
     5     location /static/img/ {
     6 
     7     }
     8 
     9     location ~* /static/ {
    10 
    11     }
    12 
    13     location ~* /static/img/ {
    14 
    15     }
    Code-10

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

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

  • 相关阅读:
    LeetCode题解之Flipping an Image
    LeetCode 之Find Minimum in Rotated Sorted Array
    LeetCode题解Transpose Matrix
    LeetCode 题解之Minimum Index Sum of Two Lists
    LeetCode题解之Intersection of Two Linked Lists
    LeetCode 题解之Add Two Numbers II
    LeetCode题解之Add two numbers
    href="#"与href="javascript:void(0)"的区别
    有关ie9 以下不支持placeholder属性以及获得焦点placeholder的移除
    ie7下属性书写不规范造成的easyui 弹窗布局紊乱
  • 原文地址:https://www.cnblogs.com/Lonelydancer/p/6259573.html
Copyright © 2011-2022 走看看