-->
当前位置:首页 > DayDayUp > 正文内容

Apache Order规则(Allow deny)学习

Luz1年前 (2023-10-30)DayDayUp1528


在 Apache HTTP Server 中,Order 指令通常与 Allow 和 Deny 指令一起使用,用于控制访问权限。

这组指令可以用来定义哪些客户端或 IP 地址被允许访问资源,哪些被拒绝。

Order 指令决定了如何处理多个 Allow 和 Deny 指令的规则,以确定最后的访问结果。

Order 指令有两个值可选:allow,deny 和 deny,allow,它们决定了 Allow 和 Deny 指令的处理顺序。


两种规则的逻辑

  1. Order allow,deny:在这种情况下,Allow 指令会首先生效,然后 Deny 指令。顺序如下:

    • 所有客户端默认允许访问。

    • 如果有 Deny 规则匹配,那么访问被拒绝,不论之前是否有匹配的 Allow 规则。

    • 如果没有 Deny 规则匹配,然后再检查 Allow 规则。只有匹配 Allow 规则的客户端才被允许访问。

    • 如果没有匹配的 AllowDeny 规则,那么访问也会被允许。

  2. Order deny,allow:在这种情况下,Deny 指令会首先生效,然后 Allow 指令。顺序如下:

    • 所有客户端默认被拒绝访问。

    • 如果有 Allow 规则匹配,那么访问被允许,不论之前是否有匹配的 Deny 规则。

    • 如果没有 Allow 规则匹配,然后再检查 Deny 规则。只有匹配 Deny 规则的客户端才被拒绝访问。

    • 如果没有匹配的 AllowDeny 规则,那么访问也会被拒绝。



例子

<Directory "/var/www/public">
    Order allow,deny
    Allow from all
    Deny from 192.168.1.100
</Directory>

由于allow在前,先执行allow from all,再执行deny from 192.168.1.100

即允许192.168.1.100以外的所有地址访问/var/www/public


<Directory "/var/www/private">
    Order deny,allow
    Deny from all
    Allow from 192.168.1.100
</Directory>

先拒绝所有流量,再允许192.168.1.100的流量,即只允许192.168.1.100的流量访问


<Directory "/var/www/internal">
   Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 192.168.1
</Directory>

先拒绝所有流量,再允许127.0.0.1与192.168.1开头的流量,即只允许127.0.0.1与192.168.1开头的访问



<Directory "/var/www/images">
   Order allow,deny
    <FilesMatch "\.(jpg|png|gif)$">
        Allow from all
    </FilesMatch>
    Order deny,allow
    Deny from all
</Directory>

允许所有IP地址访问 /images 目录中的图片文件,但拒绝所有其他文件的访问


一个Directory块中多个order

如果在Apache配置中有两个`Order`指令,它们定义了两组不同的访问控制规则,

一个使用"allow,deny"顺序,另一个使用"deny,allow"顺序。

这两个`Order`指令分别影响在同一个`<Directory>`块或类似的配置块内的访问控制规则的执行顺序。


<Directory "/var/www/example">
   Order allow,deny
   Allow from all
   Order deny,allow
   Deny from 192.168.1.100
</Directory>


在这个例子中,`Order allow,deny`指令将首先应用,它允许所有IP地址访问`/var/www/example`目录。

然后,`Order deny,allow`指令将应用,它将拒绝特定IP地址(192.168.1.100)的访问。

因为这两个指令使用了不同的顺序,所以它们的执行顺序是有影响的。


实际执行顺序如下:


1. 首先,`Order allow,deny`允许所有IP地址访问目录。

2. 然后,`Order deny,allow`拒绝特定IP地址(192.168.1.100)的访问。

但由于先前的"允许"规则已经生效,这个"拒绝"规则不会影响其他IP地址。


这就是两个`Order`指令的关系,它们会按照它们在配置中的顺序依次应用,

而不是相互冲突。这允许更复杂的访问控制规则的定制。



多个order下的默认规则

在Apache中,如果一个请求在多个`Order`规则中都没有匹配到规则(既不允许也不拒绝),

那么最后一个出现的`Order`规则将起作用。

 Apache按照它们在配置文件中的出现顺序逐个处理`Order`规则,

如果一个请求在所有`Order`规则中都没有匹配到规则,则最后一个规则决定请求的处理方式。


例如,如果你有以下配置:


<Directory "/var/www/example">
   Order allow,deny
   Allow from 192.168.0
   Order deny,allow
   Deny from 192.168.1.100
</Directory>



在这个配置中,如果一个请求来自一个既不匹配`Allow from 192.168.0`也不匹配`Deny from 192.168.1.100`的IP地址,

那么请求将按照最后一个出现的`Order`规则(`Order deny,allow`)的规则来处理。

因此,请求将被拒绝,因为`Order deny,allow`规则指示"先拒绝,后允许"。

Apache 20th Anniversary Logo

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。