必须用VirtualHost拦截IP访问:在httpd-vhosts.conf顶部配ServerName为真实IP的拒绝型虚拟主机(Require all denied),再配真实域名的允许型虚拟主机,顺序不可颠倒,且需确保Include启用、无NameVirtualHost指令。

禁止通过 IP 直接访问 Apache 服务器,核心目标不是“封掉某个攻击 IP”,而是**阻止用户用 http://192.168.1.100 或 http://203.0.113.5 这类地址打开你的网站**——这属于虚拟主机路由控制问题,和防火墙或 IP 黑名单是两回事。
必须用 VirtualHost 拦截默认请求
Apache 启动后,只要存在 <virtualhost></virtualhost>,且请求的 Host 头(比如浏览器发来的 Host: 192.168.1.100)没被任何 ServerName 精确匹配,它就会交给第一个定义的 VirtualHost。这就是为什么输 IP 就能打开首页——它根本没进你写的域名配置,而是进了“默认兜底”的那个。
- 在
httpd-vhosts.conf最顶部加一个“拒绝型”虚拟主机,ServerName必须写你服务器的真实 IP(如192.168.1.100,不能写localhost或留空) -
DocumentRoot指向一个空目录(如C:/xampp/htdocs/denied) - 在对应
<directory></directory>块里写Require all denied
再配真实域名的允许型 VirtualHost
紧接在上面那个之后,写你真正的站点配置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
ServerName mysite.local(必须和你在系统hosts文件里配的一致) -
ServerAlias www.mysite.local(可选) -
DocumentRoot指向项目真实路径 -
<directory></directory>内写Require all granted
两个 VirtualHost 都要监听 *:80,确保 httpd.conf 中已启用 Include conf/extra/httpd-vhosts.conf,且已删除或注释所有 NameVirtualHost 行(Apache 2.4+ 不需要它)。
验证与常见踩坑点
改完保存,重启 Apache:
- 访问
http://192.168.1.100→ 应返回 403 Forbidden - 访问
http://mysite.local→ 应正常加载页面 - 如果 IP 访问仍成功:检查
ServerName是否写成了_、localhost或带端口;确认 hosts 文件有127.0.0.1 mysite.local - 如果域名打不开:可能是
httpd-vhosts.conf没被正确包含,或Listen 80被意外关闭
HTTPS 环境也要同步处理
如果启用了 SSL,*:443 的配置逻辑一样:
- 顶部加一个
<virtualhost></virtualhost>,ServerName写你的 IP,SSLEngine on+ 证书路径 +Require all denied - 后面跟真实的域名 HTTPS 虚拟主机,同样配好证书和
Require all granted - HTTP 虚拟主机中建议加
Redirect permanent / https://mysite.local/强制跳转

















