apache 2.4 访问控制完全基于 require 指令,不再支持 order/allow/deny;需配合容器使用,默认拒绝未显式授权的请求,并支持基础指令、组合逻辑、require expr 动态判断及虚拟主机级权限隔离。

Apache 2.4 的访问控制完全基于 Require 指令,不再支持旧版的 Order/Allow/Deny。它通过声明式规则决定谁可以访问资源,必须配合容器(如 <directory></directory>、<location></location>)使用,且未显式授权即默认拒绝。
Require 基础指令与常见用法
最常用的几个指令直接表达明确意图:
-
Require all granted:放行所有请求(开发或内网服务常用) -
Require all denied:一律拒绝(如保护.htaccess或敏感配置文件) -
Require local:仅允许本机(127.0.0.1和::1) -
Require ip 192.168.1.0/24:按 IPv4 或 IPv6 网段放行 -
Require host example.com:依赖 DNS 反向解析匹配主机名(需确保 DNS 可靠)
组合逻辑与容器控制
多个 Require 行默认是“或”关系;若需“且”逻辑(比如既要 IP 合法又要用户认证),必须包裹在 <requireall></requireall> 中;<requireany></requireany> 显式表示“或”,<requirenone></requirenone> 表示全不满足才通过。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 只允特定 IP 访问:
<requireall><br> Require ip 203.0.113.50<br></requireall>
- 开放全部但屏蔽某个恶意 IP:
<requireall><br> Require all granted<br> Require not ip 192.168.1.200<br></requireall>
- 同时满足 IP + 用户组:
<requireall><br> Require ip 10.0.10.0/24<br> Require group admins<br></requireall>
用 Require expr 实现动态判断
Require expr 是 Apache 2.4 的高级能力,支持运行时表达式,适用于时间窗口、证书校验、请求头过滤等场景。它必须写在 <requireall></requireall>、<requireany></requireany> 或 <requirenone></requirenone> 内部。
- 工作日 9:00–18:00 开放:
Require expr "time_wday >= 1 && time_wday = 9 && time_hour - 拦截已知爬虫 UA:
Require expr "%{HTTP_USER_AGENT} !~ m/(ZmEu|oBot|BadBot)/i" - 结合客户端证书验证 OU 和 CN:
Require expr "%{SSL_CLIENT_S_DN_OU} == 'IT' && %{SSL_CLIENT_S_DN_CN} =~ m/^dev-[0-9]{4}$/"
虚拟主机与目录级权限隔离
每个 <virtualhost></virtualhost> 必须为其 DocumentRoot 单独配置 <directory></directory> 块,并在其中写明 Require 规则。全局设置不会继承,路径不匹配或遗漏 Require 就会返回 403。
- 生产站限制后台路径:
<location><br> Require ip 203.0.113.42<br></location>
- 测试站仅对内网开放:
<directory><br> <requireall><br> Require ip 172.16.0.0/12<br> </requireall><br></directory>
- 避免误配:确认
<directory></directory>路径与DocumentRoot完全一致(建议统一不带末尾斜杠)










