Apache HTTP Server 版本 2.4

| 描述 | 基于主机(名称或 IP 地址)的组授权 |
|---|---|
| 状态 | 基础 |
| 模块标识符 | authz_host_module |
| 源文件 | mod_authz_host.c |
| 兼容性 | forward-dns 提供程序在 2.4.19 中添加 |
由 mod_authz_host 实现的授权提供程序使用 Require 指令注册。该指令可以在 <Directory>、<Files> 或 <Location> 部分以及 .htaccess 文件中引用,以控制对服务器特定部分的访问。可以根据客户端主机名或 IP 地址控制访问。
通常,访问限制指令适用于所有访问方法(GET、PUT、POST 等)。这在大多数情况下是期望的行为。但是,可以通过将指令包含在 <Limit> 部分中,来限制某些方法,同时保持其他方法不受限制。
Apache 的 Require 指令在授权阶段使用,以确保用户被允许或拒绝访问资源。mod_authz_host 通过 ip、host、forward-dns 和 local 扩展了授权类型。也可以使用其他授权类型,但可能需要加载额外的授权模块。
这些授权提供程序会影响哪些主机可以访问服务器的某个区域。可以通过主机名、IP 地址或 IP 地址范围控制访问。
从 v2.4.8 开始,表达式 在主机 require 指令中受支持。
ip 提供程序允许根据远程客户端的 IP 地址控制对服务器的访问。当指定 Require ip ip-address 时,如果 IP 地址匹配,则请求被允许访问。
完整的 IP 地址
Require ip 10.1.2.3 Require ip 192.168.1.104 192.168.1.205
允许访问的主机的 IP 地址
部分 IP 地址
Require ip 10.1 Require ip 10 172.20 192.168.2
IP 地址的前 1 到 3 个字节,用于子网限制。
网络/网络掩码对
Require ip 10.1.0.0/255.255.0.0
网络 a.b.c.d 和网络掩码 w.x.y.z。用于更细粒度的子网限制。
网络/nnn CIDR 规范
Require ip 10.1.0.0/16
与上一情况类似,只是网络掩码由 nnn 个高位 1 位组成。
请注意,上面最后三个示例匹配完全相同的宿主集。
IPv6 地址和 IPv6 子网可以按如下所示指定
Require ip 2001:db8::a00:20ff:fea7:ccea Require ip 2001:db8:1:1::a Require ip 2001:db8:2:1::/64 Require ip 2001:db8:3::/48
注意:由于 IP 地址在启动时解析,因此表达式不会在请求时进行评估。
host 提供程序允许根据远程客户端的主机名控制对服务器的访问。当指定 Require host host-name 时,如果主机名匹配,则请求被允许访问。
(部分)域名
Require host example.org Require host .net example.edu
名称匹配或以该字符串结尾的主机被允许访问。只匹配完整的组件,因此上面的示例将匹配 foo.example.org,但不会匹配 fooexample.org。此配置将导致 Apache 对客户端 IP 地址执行双重反向 DNS 查找,无论 HostnameLookups 指令的设置如何。它将对 IP 地址执行反向 DNS 查找以找到关联的主机名,然后对主机名执行正向查找以确保它与原始 IP 地址匹配。只有当正向和反向 DNS 一致且主机名匹配时,才允许访问。
forward-dns 提供程序允许根据简单主机名控制对服务器的访问。当指定 Require forward-dns host-name 时,与 host-name 相对应的所有 IP 地址都被允许访问。
与 host 提供程序相比,此提供程序不依赖于反向 DNS 查找:它只是查询 DNS 以获取主机名,如果客户端的 IP 匹配,则允许访问。因此,它只适用于可以在 DNS 中解析的完整主机名,而不是部分域名。但是,由于没有使用反向 DNS,并且 DNS 查找在请求处理时(而不是启动时)发生,因此它将适用于使用动态 DNS 服务的客户端。
Require forward-dns dynamic.example.org
从名称 dynamic.example.org 解析其 IP 的客户端将被授予访问权限。
forward-dns 提供程序在 2.4.19 中添加。
如果以下任何条件为真,则 local 提供程序允许访问服务器
这提供了一种方便的方法来匹配源自本地主机的连接
Require local
如果您将内容代理到您的服务器,您需要知道客户端地址将是您的代理服务器的地址,而不是客户端的地址,因此在这种情况下使用 Require 指令可能不会达到您的预期效果。请参阅 mod_remoteip 以了解解决此问题的可能方法之一。