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

  • 相关阅读:
    人脸识别算法初次了解
    白话经典算法系列之二 直接插入排序的三种实现
    常见浏览器兼容性问题与解决方式
    MP3的频率、比特率、码率与音质的关系
    程序猿接私活经验总结,来自csdn论坛语录
    Java虚拟机工作原理具体解释
    簡單SQL存儲過程實例
    全栈JavaScript之路(七)学习 Comment 类型节点.
    strdup函数的使用方法
    POJ 2823 Sliding Window 【单调队列】
  • 原文地址:https://www.cnblogs.com/Lonelydancer/p/6259573.html
Copyright © 2011-2022 走看看