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
以了解解决此问题的可能方法之一。