| 描述: | 基于主机(名称或IP地址)的组授权 |
|---|---|
| 状态: | 延期 |
| 模块标识符: | access_compat_module |
| 源文件: | mod_access_compat.c |
| 兼容性: | 在Apache HTTP Server 2.3中作为与Apache httpd 2.x以前版本的兼容性模块提供。新的authz重构已弃用此模块提供的指令。请参阅
mod_authz_host |
所提供的指令mod_access_compat在使用<Directory>,
<Files>以及
<Location>区段以及.htaccess
文件服务器的特定部分的访问。可以根据客户端主机名,IP地址或客户端请求的其他特征来控制访问,如环境变量中所述。在Allow和Deny指令用于指定哪些客户端或不允许对服务器的访问,而Order
指令设置默认的访问状态,并配置如何
Allow和Deny指令彼此交互。
基于主机的访问限制和基于密码的身份验证都可以同时实现。在这种情况下,该Satisfy伪指令用于确定两组限制如何相互作用。
所提供的指令mod_access_compat已被弃用mod_authz_host。从技术上讲,可以将旧指令(例如Order)Allow或Deny新
指令(例如)混合使用,Require但不建议这样做。创建该模块是为了支持仅包含旧指令的配置,以促进2.4升级。请查看升级指南以获取更多信息。
一般来说,访问限制指令适用于所有接入方式(GET,PUT,
POST等)。在大多数情况下,这是所需的行为。但是,可以通过将指令括在一<Limit>节中来限制某些方法,而使其他方法不受限制。
在新的配置节中使用此模块提供的任何指令时,此模块提供的指令均不会从以前的配置节中继承。
| 描述: | 控制哪些主机可以访问服务器区域 |
|---|---|
| 句法: | Allow from all|host|env=[!]env-variable
[host|env=[!]env-variable] ... |
| 内容: | 目录.htaccess |
| 覆写: | 限制 |
| 状态: | 延期 |
| 模块: | mod_access_compat |
该Allow指令影响哪些主机可以访问服务器的区域。可以通过主机名,IP地址,IP地址范围或环境变量中捕获的客户端请求的其他特征来控制访问。
该指令的第一个参数始终为
from。后续参数可以采用三种不同的形式。如果Allow from all指定,则允许所有主机访问,但要遵循下面讨论的Deny和Order指令的配置
。要仅允许特定主机或主机组访问服务器,可以以下列任何一种格式指定主机:
Allow from example.org Allow from .net example.edu
名称匹配或以该字符串结尾的主机被允许访问。仅匹配完整的组件,因此上面的示例将匹配,foo.example.org但不匹配fooexample.org。无论HostnameLookups指令的设置如何,此配置都会导致Apache httpd在客户端IP地址上执行双重DNS查找。它将对IP地址进行反向DNS查找,以找到关联的主机名,然后对主机名进行正向查找,以确保其与原始IP地址匹配。仅当正向和反向DNS一致且主机名匹配时,才允许访问。
Allow from 10.1.2.3 Allow from 192.168.1.104 192.168.1.205
主机允许访问的IP地址
Allow from 10.1 Allow from 10 172.20 192.168.2
IP地址的前1至3个字节,用于子网限制。
Allow from 10.1.0.0/255.255.0.0
网络abcd和网络掩码wxyz用于更细粒度的子网限制。
Allow from 10.1.0.0/16
与前面的情况类似,除了网络掩码由nnn个高1位组成。
请注意,以上最后三个示例完全匹配同一组主机。
可以如下所示指定IPv6地址和IPv6子网:
Allow from 2001:db8::a00:20ff:fea7:ccea Allow from 2001:db8::a00:20ff:fea7:ccea/10
Allow指令参数的第三种格式
允许根据环境变量的存在来控制对服务器的访问。当指定时,那么如果环境变量的请求被允许访问ENV-变量
是否存在。当指定时,则请求被允许访问,如果该环境变量ENV-变量不存在。服务器提供了使用所提供的指令根据客户端请求的特征灵活设置环境变量的功能
。因此,该指令可用于允许基于客户端
(浏览器类型),Allow from
env=env-variableAllow from env=!env-variablemod_setenvifUser-AgentReferer或其他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 |
| 覆写: | 限制 |
| 状态: | 延期 |
| 模块: | mod_access_compat |
该指令允许根据主机名,IP地址或环境变量来限制对服务器的访问。对于这些参数Deny的指令是相同的论据,Allow指令。
| 描述: | 控制默认访问状态以及对Allow和Deny进行评估的顺序
。 |
|---|---|
| 句法: | Order ordering |
| 默认: | Order Deny,Allow |
| 内容: | 目录.htaccess |
| 覆写: | 限制 |
| 状态: | 延期 |
| 模块: | mod_access_compat |
该Order指令与Allow和
Deny指令一起
控制三遍访问控制系统。第一遍处理指令指定的所有Allow或所有
指令。第二遍解析其余的指令(或
)。第三遍适用于所有与前两个都不匹配的请求。DenyOrderDenyAllow
请注意,所有Allow和Deny指令都经过处理,这与典型的防火墙不同,在典型的防火墙中,仅使用第一个匹配项。最后一个匹配有效(也不同于典型的防火墙)。此外,行在配置文件中的显示顺序并不重要-所有Allow行都作为一个组处理,所有Deny行都视为另一组,并且默认状态由其自身考虑。
订购是以下之一:
Allow,DenyAllow评估所有指令;至少一个必须匹配,否则请求被拒绝。接下来,Deny
评估所有指令。如果有匹配项,则请求被拒绝。最后,默认情况下会拒绝与Allow或Deny指令不匹配的任何请求。Deny,AllowDeny评估所有指令;如果有匹配项,则除非该请求也与Allow指令匹配,否则该请求将被拒绝
。允许与请求Allow或Deny指令不匹配的任何请求。Mutual-failureOrder
Allow,Deny并且不赞成使用。关键字只能用逗号分隔; 它们之间不允许有空格。
| 比赛 | 允许,拒绝结果 | 拒绝,允许结果 |
|---|---|---|
| 仅匹配允许 | 允许请求 | 允许请求 |
| 仅匹配拒绝 | 请求被拒绝 | 请求被拒绝 |
| 没有匹配 | 默认为第二个指令:拒绝 | 默认为第二指令:允许 |
| 匹配允许和拒绝 | 决赛控制:拒绝 | 决赛控制:允许 |
在以下示例中,允许example.org域中的所有主机访问;所有其他主机都被拒绝访问。
Order Deny,Allow Deny from all Allow from example.org
在下一个示例中,example.org域中的所有主机都被允许访问,但foo.example.org子域中的主机被拒绝访问。由于默认状态是Deny
访问服务器,因此所有不在example.org域中的主机都被拒绝访问。
Order Allow,Deny Allow from example.org Deny from foo.example.org
另一方面,如果将Order上一个示例中的更改为Deny,Allow,则将允许所有主机访问。发生这种情况的原因是,无论配置文件中指令的实际顺序如何,
Allow from example.org都会最后评估,并将覆盖Deny from foo.example.org。example.org也将允许所有不在该域中的主机访问,因为默认状态为Allow。
Order伪指令的存在可能会影响对服务器一部分的访问,即使在没有附带
指令Allow
和Deny伪指令的情况下,因为它会影响默认访问状态。例如,
<Directory "/www">
Order Allow,Deny
</Directory>
将拒绝对/www目录的所有访问,因为默认访问状态设置为
Deny。
该Order指令仅在服务器配置处理的每个阶段内控制访问指令处理的顺序。这意味着,例如,一个
Allow或Deny指令在发生
<Location>部分将总是后进行评估Allow或Deny指令以发生
<Directory>部分或
.htaccess文件,而不管的设置的
Order指令。有关合并配置部分的详细信息,请参阅“ 目录,位置和文件”部分的工作方式文档。
在新的配置节中使用此模块提供的任何指令时,此模块提供的指令均不会从以前的配置节中继承。
| 描述: | 主机级访问控制和用户身份验证之间的交互 |
|---|---|
| 句法: | Satisfy Any|All |
| 默认: | Satisfy All |
| 内容: | 目录.htaccess |
| 覆写: | 验证配置 |
| 状态: | 延期 |
| 模块: | mod_access_compat |
| 兼容性: | 受影响<Limit>和<LimitExcept>在2.0.51版及更高版本 |
访问策略如果同时Allow和Require使用。参数可以是All或Any。仅当用户名/密码和客户端主机地址都限制了对特定区域的访问时,此指令才有用。在这种情况下,默认行为(All)是要求客户端通过地址访问限制并输入有效的用户名和密码。使用该Any选项,如果客户端通过主机限制或输入有效的用户名和密码,则将授予客户端访问权限。这可用于密码限制区域,但允许来自特定地址的客户端进入而无需提示输入密码。
例如,如果您想让网络中的人可以不受限制地访问网站的一部分,但是要求网络外的人提供密码,则可以使用类似于以下的配置:
Require valid-user Allow from 192.168.1 Satisfy Any
该Satisfy指令的另一个常见用法是放宽对子目录的访问限制:
<Directory "/var/www/private">
Require valid-user
</Directory>
<Directory "/var/www/private/public">
Allow from all
Satisfy Any
</Directory>
在上面的示例中,/var/www/private目录将需要身份验证,但目录将不需要身份验证
/var/www/private/public。
由于版本2.0.51 Satisfy指令可以由<Limit>和<LimitExcept>部分限制为特定方法。
在新的配置节中使用此模块提供的任何指令时,此模块提供的指令均不会从以前的配置节中继承。