<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 操作指南 / 教程

访问控制

可用语言:  en  |  es  |  fr 

访问控制是指控制对任何资源的访问的任何手段。这与 身份验证和授权 是分开的。

Support Apache!

另请参阅

top

相关模块和指令

访问控制可以通过几个不同的模块来完成。其中最重要的模块是 mod_authz_coremod_authz_host。本文档还讨论了使用 mod_rewrite 进行访问控制。

top

按主机进行访问控制

如果您希望根据访问者的主机地址限制对网站部分内容的访问,最简单的方法是使用 mod_authz_host

The Require 提供了多种不同的方式来允许或拒绝访问资源。结合 RequireAllRequireAnyRequireNone 指令,这些要求可以以任意复杂的方式组合在一起,以执行您的访问策略。

The AllowDenyOrder 指令由 mod_access_compat 提供,已弃用,将在未来版本中移除。您应该避免使用它们,并避免使用推荐使用它们的过时教程。

这些指令的用法是

Require host address
Require ip ip.address

在第一种形式中,address 是一个完全限定的域名(或部分域名);如果需要,您可以提供多个地址或域名。

在第二种形式中,ip.address 是一个 IP 地址、一个部分 IP 地址、一个网络/网络掩码对或一个网络/nnn CIDR 规范。可以使用 IPv4 或 IPv6 地址。

有关此语法示例的更多信息,请参阅 mod_authz_host 文档

您可以插入 not 来否定特定要求。请注意,由于 not 是对值的否定,因此它不能单独用于允许或拒绝请求,因为 not true 不构成 false。因此,要使用否定来拒绝访问,该块必须包含一个评估为真或假的元素。例如,如果您有人在您的留言板中发送垃圾邮件,并且您想阻止他们,您可以执行以下操作

<RequireAll>
    Require all granted
    Require not ip 10.252.46.165
</RequireAll>

来自该地址 (10.252.46.165) 的访问者将无法看到此指令涵盖的内容。如果您使用的是机器名而不是 IP 地址,则可以使用该机器名。

Require not host host.example.com
    

而且,如果您想阻止来自整个域的访问,您可以只指定地址或域名的一部分

Require not ip 192.168.205
Require not host phishers.example.com moreidiots.example
Require not host gov

可以使用 RequireAllRequireAnyRequireNone 指令来执行更复杂的规则集。

top

按任意变量进行访问控制

使用 <If>,您可以根据任意环境变量或请求头值来允许或拒绝访问。例如,要根据用户代理(浏览器类型)拒绝访问,您可以执行以下操作

<If "%{HTTP_USER_AGENT} == 'BadBot'">
    Require all denied
</If>

使用 Require expr 语法,也可以这样写

Require expr %{HTTP_USER_AGENT} != 'BadBot'

警告

通过 User-Agent 进行访问控制是一种不可靠的技术,因为 User-Agent 标头可以根据最终用户的意愿设置为任何内容。

有关可用的表达式语法和变量的更多讨论,请参阅 表达式文档

top

使用 mod_rewrite 进行访问控制

The [F] RewriteRule 标志会导致发送 403 Forbidden 响应。使用它,您可以根据任意条件拒绝访问资源。

例如,如果您想阻止在晚上 8 点到早上 7 点之间访问资源,可以使用 mod_rewrite

RewriteEngine On
RewriteCond "%{TIME_HOUR}" ">=20" [OR]
RewriteCond "%{TIME_HOUR}" "<07"
RewriteRule "^/fridge"     "-" [F]

这将对晚上 8 点之后或早上 7 点之前的任何请求返回 403 Forbidden 响应。此技术可用于您希望检查的任何条件。您也可以重定向或以其他方式重写这些请求,如果这种方法更可取。

The <If> 指令是在 2.4 中添加的,它取代了 mod_rewrite 传统上用于执行的许多操作,因此您应该在求助于 mod_rewrite 之前先查看它。

top

更多信息

The 表达式引擎 为您提供了强大的功能,可以根据任意服务器变量执行各种操作,您应该查阅该文档以获取更多详细信息。

此外,您应该阅读 mod_authz_core 文档,以了解如何组合多个访问要求以及指定它们之间的交互方式。

另请参阅 身份验证和授权 操作指南。

可用语言:  en  |  es  |  fr 

top

评论

注意
这不是问答区。此处发布的评论应针对改进文档或服务器的建议,如果这些建议已实施或被认为无效/与主题无关,则可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表