apache 2.4+ 白名单需先写 require all denied 兜底,再用 require ip 指定允许的ip或网段;多条件“且”逻辑须用 包裹;依赖 allowoverride none、路径精确匹配、cdn下启用 mod_remoteip 等前提。

Apache 2.4+ 中实现 Directory 白名单 IP 访问控制,核心是**显式拒绝所有、再精准放行指定 IP 或网段**。Require 指令取代了旧版的 Order/Allow/Deny,多条 Require 默认为“或”关系,不加包裹容器时满足任一即通过。
白名单配置的基本结构
必须包含 Require all denied 作为兜底规则,否则未匹配的请求可能继承父目录策略,造成意外放行。之后逐条写入允许的 IP 或网段,空格分隔即可:
-
Require all denied—— 第一行必须写,明确阻断全部访问 -
Require ip 192.168.5.0/24—— 允许整个内网段 -
Require ip 203.0.113.42 127.0.0.1—— 允许多个离散 IP,用空格分隔
需要“且”逻辑时用
当要求同时满足多个条件(比如“IP 在白名单内 且 用户已通过密码认证”),必须将规则包在
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<requireall></requireall>Require ip 10.0.10.0/24Require valid-user
此时客户端必须既来自指定网段,又提供有效的用户名密码,缺一不可。单独写 Require ip 和 Require valid-user 而不加容器,结果是“或”关系,安全性大幅降低。
常见易错点与配套设置
白名单生效依赖几个关键前提,漏掉任一都可能导致规则失效或报错:
- AllowOverride None:确保 .htaccess 文件无法覆盖该目录的 Require 规则
- 路径精确匹配:Directory 路径需与文件系统真实路径一致,末尾斜杠不影响,但大小写和拼写必须准确
- CDN 场景需启用 mod_remoteip:若网站前置 CDN,REMOTE_ADDR 是 CDN 节点 IP,需用 RemoteIPHeader X-Forwarded-For 等方式还原真实客户端 IP,否则白名单会失效
- 避免混用新旧语法:Order、Allow、Deny、Satisfy 等指令在 2.4+ 中已废弃,混用会导致 500 错误
验证是否生效的三个典型检查
配置完成后,建议快速验证三类场景:
- 从非白名单 IP 访问该目录 → 应返回 403 Forbidden
- 从白名单 IP 访问 → 应正常加载页面或资源
- 直接请求
.htaccess或phpinfo.php(若存在)→ 不应下载或执行,而应被拒绝(配合 FilesMatch 使用更稳妥)










