Apache HTTP服务器 2.0版本

| 说明: | 提供基于客户端主机名、IP地址或者客户端请求的其他特性的存取访问控制。 |
|---|---|
| 状态: | Base |
| 模块名: | access_module |
| 源文件: | mod_access.c |
mod_access提供的指令用在<Directory>, <Files>, and <Location>部分中,也用于
.htaccess
文件中控制对服务器特定部分的访问。只要在环境变量中捕获到主机名、IP地址或其他客户端请求的特征,就可以基于这些特性对访问进行控制。
Allow和Deny指令字被用于指出允许哪些客户及不允许哪些客户访问服务器,
而Order指令字设置缺省的访问状态并配置
Allow和Deny指令怎样相互作用。
基于主机的访问限制和基于口令的身份证明两套机制可以同时实现。在那种情况下,
Satisfy指令用来决定着两套机制如何相互作用。
一般来说,访问限制指令适用于所有的访问存取方法(GET, PUT,
POST等等)。在多数情况下这是一个被期望的特性。但是,只限制一些方法而对其他方法不加限制也是可能的,
通过把指令放到一个<Limit>小节中去。
| 说明: | 控制哪些主机能够访问服务器的一个区域 |
|---|---|
| 语法: | Allow from
all|host|env=env-variable
[host|env=env-variable] ... |
| 上下文: | 目录, .htaccess |
| 覆盖项: | Limit |
| 状态: | Base |
| 模块: | mod_access |
Allow指令影响哪些主机可以访问服务器的一个区域。可以用主机名、IP地址、
IP地址范围或者其他环境变量中捕获的客户端请求特性来对访问进行控制。
这个指令的第一个参数总是from。随后的参数可以有三种不同形式。
如果指定Allow from all,则允许所有主机访问,需要
Deny和Order指令像下面讨论的那样配置。
要只允许特定一部分主机或主机群访问服务器,host可以用下面任何一种格式来指定:
Allow from apache.orgfoo.apache.org而不能匹配fooapache.org。
这样的配置将引起服务器执行一个对客户IP地址的反查域名操作而不管HostnameLookups指令是否设置Allow from 10.1.2.3Allow from 10.1Allow from
10.1.0.0/255.255.0.0Allow from 10.1.0.0/16注意以上后三个例子完全匹配同一组主机。
IPv6地址和IPv6子网可以像下面这样指定:
Allow from fe80::a00:20ff:fea7:ccea
Allow from fe80::a00:20ff:fea7:ccea/10
Allow指令的第三种参数格式允许对服务器的访问由
环境变量的一个扩展指定。指定 Allow from
env=env-variable时,如果环境变量env-variable存在则访问请求被允许。
使用由mod_setenvif提供的指令,服务器用一种基于客户端请求的弹性方式提供了设置环境变量的能力。
因此,这条指令可以用于允许基于像User-Agent(浏览器类型)、Referer或者其他Http请求头字段
的访问。
SetEnvIf User-Agent ^KnockKnock/2.0 let_me_in
<Directory /docroot>
Order Deny,Allow
Deny from all
Allow from env=let_me_in
</Directory>
这种情况下,发送以KnockKnock/2.0开头的用户代理标示的浏览器将被允许访问,而所有其他浏览器将被禁止访问。
| 说明: | 控制哪些主机被禁止访问服务器 |
|---|---|
| 语法: | Deny from
all|host|env=env-variable
[host|env=env-variable] ... |
| 上下文: | 目录, .htaccess |
| 覆盖项: | Limit |
| 状态: | Base |
| 模块: | mod_access |
这条指令允许基于主机名、IP地址或者环境变量限制对服务器的访问。
Deny指令的参数设置和Allow指令完全相同。
| 说明: | 控制缺省的访问状态和Allow与Deny指令被评估的顺序。 |
|---|---|
| 语法: | Order ordering |
| 默认值: | Order Deny,Allow |
| 上下文: | 目录, .htaccess |
| 覆盖项: | Limit |
| 状态: | Base |
| 模块: | mod_access |
Order指令控制缺省的访问状态和
Allow与Deny指令被评估的顺序。
Ordering是以下几种范例之一:
Deny指令在
Allow指令之前被评估。缺省允许所有访问。
任何不匹配Deny指令或者匹配
Allow指令的客户都被允许访问服务器。Allow指令在
Deny指令之前被评估。缺省禁止所有访问。
任何不匹配Allow指令或者匹配
Deny指令的客户都将被禁止访问服务器。Allow列表并且不出现在
Deny列表中的主机才被允许访问。
这种顺序与Order Allow,Deny具有同样效果,不赞成使用。关键字只能用逗号分隔;它们之间不能有空格。注意在所有情况下每个Allow和Deny指令语句都将被评估。
在下面的例子中,apache.org域中所有主机都允许访问,而其他任何主机访问都被拒绝。
Order Deny,Allow
Deny from all
Allow from apache.org
下面例子中,apache.org域中所有主机,除了foo.apache.org子域包含的主机被拒绝访问以外,都允许访问。 而所有不在apache.org域中的主机都不允许访问,因为缺省状态是拒绝对服务器的访问。
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
另一方面,如果上个例子中的Order指令改变为Deny,Allow,
将允许所有主机的访问。这是因为,不管配置文件中指令的实际顺序如何,
Allow from apache.org指令会最后被评估到并覆盖之前的
Deny from foo.apache.org。所有不在apache.org
域中的主机也允许访问是因为缺省状态被改变到了允许。
即使没有伴随Allow和Deny指令,一个Order
指令的存在也会影响到服务器上某一个部分的访问,
这是由于他对缺省访问状态的影响。例如,
<Directory /www>
Order Allow,Deny
</Directory>
这样将会禁止所有对/www目录的访问,因为缺省状态将被设置为拒绝.
Order指令只在服务器配置的每个段内部控制访问指令的处理。
这暗示着,例如,一个在<Location>段出现的
Allow或者Deny指令总是将会在一个<Directory>段或者
.htaccess文件中出现的
Allow或Deny
指令之后被评估,而不管Order指令中的设置为何。要了解配置段落合并的详细信息,
参看How Directory, Location and Files sections
work相关文档。