apache限制特定ip访问的核心是:2.4+用require指令(需先require all denied再逐条放行),2.2及更早用order/allow/deny;必须置于等容器内,路径准确、顺序合理,并检查allowoverride、大小写及mod_remoteip适配代理环境。
apache 设置限制特定 ip 访问,核心是用 require 指令(2.4+ 推荐)或 order/allow/deny(仅限 2.2 及更早遗留环境),必须放在 <directory></directory>、<location></location> 或虚拟主机内,且路径匹配要准确、规则顺序要合理。
Apache 2.4+:用 Require 实现黑白名单
新版默认启用 mod_authz_host,所有访问控制基于 Require。关键点是:必须先写 Require all denied,再逐条放行,否则可能继承上级策略导致意外开放。
-
只允许某几个 IP(白名单):
<directory><br> Require all denied<br> Require ip 127.0.0.1<br> Require ip 192.168.10.5<br> Require ip 2001:db8::/32<br></directory>多条Require ip是“或”关系,满足任一即通过。 -
禁止某个 IP(黑名单):
<directory><br> Require all granted<br> Require not ip 192.168.1.100<br></directory>注意:Require not ip前必须有Require all granted,否则不生效。 -
支持格式:单 IP(
192.168.1.1)、CIDR 网段(10.0.0.0/8)、IPv6(::1或2001:db8::/32)。
Apache 2.2 及更早:用 Order/Allow/Deny(仅限老旧系统)
该语法已废弃,仅用于 CentOS 6 等环境。重点看 Order 决定执行优先级:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
Order Deny,Allow:先执行所有Deny,再叠加Allow,Allow优先级更高;适合白名单场景。 -
Order Allow,Deny:先允许,再拒绝,Deny会覆盖前面的Allow;适合黑名单场景。 - 典型白名单写法:
<directory><br> Order Deny,Allow<br> Deny from all<br> Allow from 127.0.0.1<br> Allow from 192.168.5.22<br></directory>
必须同步检查的配套设置
光写规则常失效,以下三点缺一不可:
-
AllowOverride None:确保子目录下的.htaccess无法绕过当前限制;若需支持.htaccess,则设为All,但要额外加权限控制。 -
路径大小写与文件系统一致:Linux 区分大小写,
/Var/www和/var/www不等价;末尾斜杠不影响匹配。 -
前端有 CDN 或负载均衡时:需启用
mod_remoteip并配置RemoteIPHeader X-Forwarded-For,否则Require ip判的是代理节点 IP,不是真实访客 IP。
验证是否生效的实测方法
改完配置后务必重启 Apache,并分场景测试:
- 从白名单 IP(如
192.168.10.5)访问目标路径 → 应正常返回页面或资源; - 从非白名单 IP(如手机热点、远程 VPS)访问 → HTTP 状态码应为 403 Forbidden;
- 检查 Apache 错误日志(如
/var/log/apache2/error.log或/var/log/httpd/error_log),确认是否有client denied by server configuration类提示。










