Apache通过<Directory>限制IP访问需按版本选语法:2.4+用Require,首行Require all denied再逐条放行;2.2及更早用Order Deny,Allow+Deny from all+Allow from xxx;路径须绝对且大小写敏感;配套需设AllowOverride None并配置mod_remoteip应对CDN。
apache 通过 <directory> 限制特定目录的 ip 访问,关键在于版本适配、路径准确、规则顺序和配套设置。2.4+ 版本必须用 require,2.2 及更早才用 order/allow/deny;混用会直接报 500 错误。
确认 Apache 版本并选对语法
先执行 httpd -v 或 apache2 -v 查版本:
-
Apache 2.4 及以上(推荐):统一使用
Require指令。必须首行写Require all denied,再逐条放行可信 IP 或网段。多条Require ip是“或”关系,满足其一即可访问。 -
Apache 2.2 及更早(仅限遗留系统):用
Order Deny,Allow+Deny from all+ 多个Allow from xxx。注意Order Deny,Allow表示允许优先级更高,适合白名单场景。
正确配置 Directory 块位置与路径
<Directory> 必须放在有效的上下文中,比如 <VirtualHost> 内部或主配置文件全局段;路径需为绝对路径,且与实际文件系统严格一致(大小写敏感):
- ✅ 正确写法:
<Directory "/var/www/html/admin"> - ❌ 错误写法:
<Directory "admin">或<Directory /var/www/html/admin/>(末尾斜杠不必要,且可能因配置差异导致匹配失败) - 若在虚拟主机中配置,确保该路径属于该
VirtualHost的DocumentRoot子目录
典型白名单配置示例
只允许本地回环和公司内网访问后台目录:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
Apache 2.4+
<Directory "/var/www/html/admin">
Require all denied
Require ip 127.0.0.1
Require ip 192.168.10.0/24
Require local
</Directory>
Apache 2.2
<Directory "/var/www/html/admin">
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.10.0/24
</Directory>
必须检查的配套项
光写规则不够,以下任一缺失都可能导致限制失效:
-
AllowOverride None:防止 .htaccess 覆盖该目录的访问控制 - 若网站前置 CDN 或反向代理(如 Nginx、Cloudflare),
Require ip默认读的是代理 IP。需启用mod_remoteip并配置RemoteIPHeader X-Forwarded-For,否则所有请求都显示为同一个节点 IP - 修改后务必运行
apachectl configtest(或apache2ctl configtest)验证语法,再systemctl reload apache2生效

















