Apache 2.4+ 使用 Require 指令实现 IP 访问控制,弃用 Order/Allow/Deny;必须置于 Directory/Location 等块中,配合 RequireAll/RequireAny 组合逻辑,显式声明默认策略(如 Require all denied),并经 configtest 验证后 reload 生效。

Apache 2.4 及以后版本主要使用 Require 指令实现基于客户端 IP 的访问控制,不再推荐使用旧版的 Allow/Deny/Order(已由 mod_access_compat 模块提供兼容支持,但属于过渡方案)。配置需放在 <Directory>、<Location>、<Files> 或虚拟主机段中,且必须配合 Require 规则生效。
基础允许/拒绝规则
最常用、最直接的写法:
-
Require all granted:放行所有 IP(默认行为,相当于“全开”) -
Require all denied:拒绝所有 IP(相当于“全关”,慎用) -
Require local:仅允许本机(127.0.0.1 和 ::1)访问 -
Require ip 192.168.1.100:只允许该单个 IPv4 地址 -
Require ip 10.0.0.0/8 172.16.0.0/12:允许多个网段,空格分隔 -
Require ip 2001:db8::/32:也支持 IPv6 网段
精准封禁特定 IP 或网段
若想“允许大多数,仅封少数”,不能单独写 Require not ip ... —— 它必须嵌套在 <RequireAll> 容器中,否则会因逻辑冲突导致 500 错误或不生效:
例如:允许所有访问,但禁止 192.168.5.100 和整个 192.168.200.0/24 网段:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
<Directory "/var/www/html/admin">
Require all granted
<RequireAll>
Require all granted
Require not ip 192.168.5.100 192.168.200.0/24
</RequireAll>
</Directory>
注意:Require all granted 在容器内外各写一次是常见且安全的写法,确保主策略明确、子策略叠加生效。
混合条件与常见组合
多个 Require 行默认是“或”关系(满足任一即可访问);一旦出现带 not 的语句,就必须用 <RequireAll> 显式定义“与”逻辑:
- 只允许公司内网(192.168.10.0/24)+ 运维笔记本(203.0.113.88)访问后台目录:
<Directory "/var/www/html/backend">
Require ip 192.168.10.0/24
Require ip 203.0.113.88
</Directory>
- 允许本地 + 某云服务出口 IP(104.28.0.0/16),但禁止其中某个测试 IP(104.28.1.5):
<Directory "/var/www/html/api">
Require local
Require ip 104.28.0.0/16
<RequireAll>
Require local
Require ip 104.28.0.0/16
Require not ip 104.28.1.5
</RequireAll>
</Directory>
验证与生效要点
配置完成后务必执行以下步骤:
- 语法检查:
sudo apachectl configtest或httpd -t,确认无报错 - 重载服务:
sudo systemctl reload httpd(避免中断连接) - 测试访问:从目标 IP 和非目标 IP 分别 curl 或浏览器访问,观察是否返回 403
- 日志定位:若异常,查
ErrorLog(如/var/log/httpd/error_log)中是否有 “client denied by server configuration” 提示

















