Apache中IP黑名单需在VirtualHost内用Require指令实现,必须搭配Require all granted/denied基础策略,写入对应Directory块并确保路径一致、配置文件已Include,禁用Order/Deny等废弃语法。

在 Apache VirtualHost 配置中,IP 黑名单不是“开关式”功能,而是通过 Require 指令组合实现的访问控制逻辑——它必须显式写在目标 <VirtualHost> 内部的 <Directory> 或直接在 <VirtualHost> 块中,并搭配基础授权策略(如 Require all granted 或 Require all denied)才能生效。
只对某个虚拟主机启用黑名单(推荐做法)
把规则限定在该站点的 <VirtualHost> 块内,不影响其他站点:
- 打开
httpd-vhosts.conf(路径如C:\phpEnv\Apache\conf\extra\httpd-vhosts.conf或C:\xampp\apache\conf\extra\httpd-vhosts.conf) - 找到你要限制的站点配置,在其
<Directory>块里写入黑名单逻辑 - 示例:拒绝两个 IP,其余放行
ServerName mysite.local
DocumentRoot "C:/phpEnv/www/mysite"
<Directory "C:/phpEnv/www/mysite">
Require all granted
Require not ip 203.0.113.5
Require not ip 192.168.1.100
</Directory>
</VirtualHost>
只对某个虚拟主机启用白名单(更安全的默认策略)
适合开发环境或内部系统,只允许指定 IP 访问:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 把
Require all denied放最前,再逐条添加允许项 - 多个
Require ip是“或”关系,满足任一即可访问 - 别漏掉本机 IPv4(
127.0.0.1)和 IPv6(::1)
ServerName dev.local
DocumentRoot "C:/phpEnv/www/dev"
<Directory "C:/phpEnv/www/dev">
Require all denied
Require ip 127.0.0.1
Require ip ::1
Require ip 192.168.1.100
</Directory>
</VirtualHost>
避免常见失效原因
规则写了却没效果?多半是以下问题之一:
-
没启用 httpd-vhosts.conf:检查
httpd.conf中Include conf/extra/httpd-vhosts.conf是否取消了注释 -
路径不一致:
<Directory>的路径必须与DocumentRoot完全相同(包括大小写、末尾斜杠) -
漏了基础策略:只写
Require not ip不生效,必须配合Require all granted或Require all denied -
用了已废弃语法:
Order、Deny from在 Apache 2.4+ 中会报错或静默失效 -
测试方式不对:浏览器访问永远是你自己的 IP,要用
curl --interface模拟被封 IP 请求
不建议全局开启或关闭黑名单
不要在 httpd.conf 顶层或主 <Directory> 块里统一加黑名单,否则容易误杀所有站点。每个虚拟主机应独立定义访问策略——既清晰又安全。如果某站点不需要限制,就留空 <Directory> 块或只写 Require all granted 即可。

















