zoukankan      html  css  js  c++  java
  • Apache的Order Allow Deny总结

    Apache关于Order Allow Deny的配置搞得我很混乱,总结一下吧:

    <Directory "/var/www/html">
     
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
        Options Indexes FollowSymLinks
     
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
        AllowOverride None
     
    #
    # Controls who can get stuff from this server.
    #
      Order deny,allow
    </Directory>

    总则:

    影响最终判断结果的只有两点:

    1. order语句中allow、deny的先后顺序;

    2. allow、deny语句中各自包含的范围。

    提醒:

    1. 修改完配置后要保存好并重启Apache服务,配置才能生效;

    2. 开头字母不分大小写;

    3. allow、deny语句不分先后顺序,谁先谁后不影响最终判断结果;但都会被判断到;

    4. order语句中,“allow,deny”之间“有且只有”一个逗号(英文格式的),而且先后顺序很重要;

    5. Apache有一条缺省规则,“order allow,deny”本身就默认了拒绝所有的意思,因为deny在allow的后面;同理,“order deny,allow”本身默认的是允许所有;当然,最终判断结果还要综合下面的allow、deny语句中各自所包含的范围;(也就是说order语句后面可以没有allow、deny语句)

    6. allow、deny语句中,第二个单词一定是“from”,否则Apache会因错而无法启动,

    7. “order allow,deny”代表先判断allow语句再判断deny语句,反之亦然。

    上面说的都是要记住的,而下面说的是我独创的理解方法。如果有人看了而没有豁然开朗的感觉,那算是我的失败!

    判断原则分4步走:

    1. 首先判断默认的;

    2. 然后判断逗号前的;

    3. 最后判断逗号后的;

    4. 最终按顺序叠加而得出判断结果。

    上面三点我说的简单而形象,主要是为了便于记忆。暂时不理解不要紧,继续看下面详细的解说自然会明白。下面以一个普通例子来做解释:

    order deny,allow

    allow from 218.20.253.2

    deny from 218.20

    1. 所谓“首先判断默认的”,就是判断“order deny,allow”这句,它默认是允许所有;

    2. 所谓“然后判断逗号前的”,因为在本例子中的order语句里面,deny在逗号的前面,所以现在轮到判断下面的deny语句了——“deny from 218.20”;

    3. 所谓“最后判断逗号后的”,因为在本例子中的order语句里面,allow在逗号的后面,所以最后轮到判断下面的allow语句了——“allow from 218.20.253.2”。

    4. 所谓“最终按顺序叠加而得出判断结果”,这是一个形象化了的说法,我把每一步判断都看作一个“不透明的图层”,然后一步步按顺序叠加上去,最终得出的“图像”就是判断结果。

    用过作图软件的人应该都知道“图层”是怎么回事,我估计Apache关于order allow deny这方面的设计理念和photoshop等作图软件关于图层的设计理念是一样的。即“游戏规则”是一样的。

    那么上面的例子就可以是这么一个步骤和图像——

    1. 先画一个白色的大圆作为背景色,代表“order deny,allow”语句,默认意思是允许所有;

    2. 然后在白色背景上面画一个小一点的黑色圆,代表“deny from 218.20”语句,意思是拒绝所有以218.20开头的IP,放进白色的大圆里面;

    3. 最后再在这个黑色圆上面点一个白点,代表“allow from 218.20.253.2”语句,意思是允许218.20.253.2通过。

    4. 到此为止,我们已经可以看到一个结果了,白色大圆上面有一个黑色圆,黑色圆上面还有一个白点。最后,我们所能看到的黑色部分就是拒绝通行的,剩下的白色部分都是允许通行的。判断的结果就是这么简单形象!

    在这里再啰嗦一下,allow、deny语句后面跟的参数有多种形式,有不同的表达方式,我在网上看到的做法是deny from IP1 IP2 IP3或allow from domain.com等。其它的表达方式大家再找别的资料看吧。我想说的是另一种表达方式:

    order deny,allow

    allow from IP1 IP2

    allow from domain.info

    allow from 219.20.55.0/24

    deny from all

    我没具体验证过这是否对,不过这样是可以正常启动Apache服务的,按道理应该是正确的表达方式。哈哈,像我这样的入门者只能这样了,还希望大家多多指教!
    下面是测试过的例子:
    ——————————–
    Order deny,allow
    allow from all
    deny from 219.204.253.8
    #全部都可以通行
    ——————————-
    Order deny,allow
    deny from 219.204.253.8
    allow from all
    #全部都可以通行
    ——————————-
    Order allow,deny
    deny from 219.204.253.8
    allow from all
    #只有219.204.253.8不能通行

    具体分析一下:
    1、由Order allow,deny得出是默认deny all,那么就是说,这个图的背景全部是黑色的;
    2、先分析allow的规则,
    allow from all,代表把黑色背景全部涂白;
    3、再分析deny的规则,
    deny from 219.204.253.8, 代表在全部涂白的背景上面点一个黑点;

    好了,最终的规则就是:只有219.204.253.8不能通行

    ——————————-
    Order allow,deny
    allow from all
    deny from 219.204.253.8
    #只有219.204.253.8不能通行
    ——————————-
    ——————————-
    Order allow,deny
    deny from all
    allow from 219.204.253.8
    #全部都不能通行

    具体分析一下:
    1、由Order allow,deny得出是默认deny all,那么就是说,这个图的背景全部是黑色的;
    2、先分析allow的规则,
    allow from 219.204.253.8,代表在黑色背景上面点一个白点;
    3、再分析deny的规则,
    deny from all, 代表所有全部涂黑,自然也覆盖了那个白点了;

    好了,最终的规则就是:全部都不能通行
    ——————————-
    Order allow,deny
    allow from 219.204.253.8
    deny from all
    #全部都不能通行
    ——————————-
    Order deny,allow
    allow from 219.204.253.8
    deny from all
    #只允许219.204.253.8通行
    ——————————-
    Order deny,allow
    deny from all
    allow from 219.204.253.8
    #只允许219.204.253.8通行
    ——————————-
    ——————————–
    Order deny,allow
    #全部都可以通行(默认的)
    ——————————-
    Order allow,deny
    #全部都不能通行(默认的)
    ——————————-
    Order allow,deny
    deny from all
    #全部都不能通行
    ——————————-
    Order deny,allow
    deny from all
    #全部都不能通行
    ——————————-
    对于上面两种情况,如果换成allow from all,则全部都可以通行!
    ——————————-
    Order deny,allow
    deny from 219.204.253.8
    #只有219.204.253.8不能通行
    ——————————-
    Order allow,deny
    deny from 219.204.253.8
    #全部都不能通行
    ——————————-
    Order allow,deny
    allow from 219.204.253.8
    #只允许219.204.253.8通行
    ——————————-
    Order deny,allow
    allow from 219.204.253.8
    #全部都可以通行
    ——————————-
    ——————————-
    order deny,allow
    allow from 218.20.253.2
    deny from 218.20
    #代表拒绝218.20开头的IP,但允许218.20.253.2通过;而其它非218开头的IP也都允许通过。
    ——————————-
    order allow,deny
    allow from 218.20.253.2
    deny from 218.20
    #和上面的差不多,只是掉换的order语句中的allow、deny先后顺序,但最终结果表示全部都拒绝!

    具体分析一下:
    1、由Order allow,deny得出是默认deny all,那么就是说,这个图的背景全部是黑色的;
    2、先分析allow的规则,
    allow from 218.20.253.2,代表在黑色背景上面点一个白点;
    3、再分析deny的规则,
    deny from 218.20, 代表涂黑所有218.20.*.*的ip,自然也把218.20.253.2给覆盖了,由于背景就是黑色的,所以都是黑色的了,最终结果表示全部都拒绝。

  • 相关阅读:
    Ajax学习笔记2客户端访问WebService(上)
    在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出(我加了点注释)
    想用JS写一段鼠标拖拽调整图片大小的代码(未完)
    key/value/index 类型定义for .net
    ReadOnly属性对TEXTBOX的状态保存有影响?
    软件开发工具名称集锦(无下载地址,收集中...)
    AjaxPro让.NET的AjaxPro变得简单
    Ajax学习笔记(15):使用ASP.NET AJAX提供的Authentication Service
    在.NET中使用Newtonsoft.Json转换,读取,写入
    Orcale的 rownum
  • 原文地址:https://www.cnblogs.com/liupengblog/p/2678519.html
Copyright © 2011-2022 走看看