apache 2.4+ 必须用 require 指令替代已废弃的 order/allow/deny,需置于 directory 或 location 块内,配合 require all denied/granted 基础策略,支持 require ip、require not ip 等语法实现精准黑白名单控制。

Apache 2.4+ 中 Require 指令替代了旧版 Allow/Deny
如果你照着老教程写 Order deny,allow 或 Deny from 192.168.1.100,Apache 启动会直接报错:Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration。XAMPP 自带的 Apache 2.4+ 已移除 mod_access_compat 模块(除非手动启用),必须改用 Require 语法。
核心原则:权限控制必须放在 <directory></directory> 或 <location></location> 块内,且需配合 Require all denied / Require all granted 基础策略使用。
-
Require ip 192.168.1.100:只允许该 IP -
Require not ip 192.168.1.100:拒绝该 IP(其余放行) -
Require ip 192.168.1.0/24:允许整个网段 -
Require all denied必须显式写在最前,否则Require not ip不生效
限制单个 IP 访问 htdocs 默认站点
修改 C:\xampp\apache\conf\httpd.conf(Windows)或 /Applications/XAMPP/xamppfiles/etc/httpd.conf(macOS)中主 <directory></directory> 区块:
<directory>
Options Indexes FollowSymLinks
AllowOverride All
Require all denied
Require not ip 192.168.1.100
</directory>
这段配置的实际效果是:所有请求默认拒绝,仅排除 192.168.1.100 —— 它仍能访问,其他 IP(包括本机 127.0.0.1)全部 403。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 若想保留本机访问,加一行
Require ip 127.0.0.1 - 若用 IPv6 地址(如
::1),写成Require ip ::1 - 修改后必须重启 Apache,否则不生效
针对虚拟主机单独限制 IP
如果你在 httpd-vhosts.conf 里定义了 <virtualhost></virtualhost>,权限控制不能只靠主配置文件——每个 <virtualhost></virtualhost> 内的 <directory></directory> 块必须独立设置。
例如限制 dev.local 站点只允许两个开发机访问:
<virtualhost>
ServerName dev.local
DocumentRoot "C:/xampp/htdocs/dev"
<directory>
Require all denied
Require ip 127.0.0.1
Require ip 192.168.1.100
Require ip 192.168.1.101
</directory></virtualhost>
- 注意
DocumentRoot和<directory></directory>路径必须完全一致,大小写敏感 - 多个
Require行是“或”关系,满足任一即放行 - 如果误写成
Require ip 192.168.1.100 192.168.1.101(空格分隔),Apache 会忽略第二项
防火墙和监听地址可能覆盖 Apache 层级限制
即使 Apache 配置正确,也可能因底层拦截导致“限制无效”或“全站打不开”:
- Windows 防火墙若未放行
httpd.exe,外部 IP 根本连不上 80 端口,Apache 规则无从执行 - 若
httpd.conf中Listen设为127.0.0.1:80,局域网 IP 请求根本进不到 Apache,Require规则形同虚设 - 某些杀毒软件会劫持 80 端口并返回自定义页面,看起来像“被禁止”,实则是端口被占
- 验证是否真进到 Apache:临时把
Require all denied改成Require all granted,再测试 IP 是否能访问;若仍不行,问题在监听或防火墙层
IP 限制逻辑只在 Apache 接收到请求后才触发,前面任何一层断开,它都无能为力。










