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

Apache 禁止直接通过 IP 访问,核心不是封 IP,而是让服务器“不响应”IP 请求——靠的是虚拟主机(VirtualHost)的匹配顺序和默认兜底行为。只要配置得当,输 http://192.168.1.100 就返回 403,而 http://example.com 正常打开。
在 httpd-vhosts.conf 顶部加一个“拒绝型”虚拟主机
这是最关键的一步。Apache 会把没匹配上任何 ServerName 的请求,交给第一个定义的 <VirtualHost> 处理。所以你要把它放在最前面,且 ServerName 必须写你服务器的真实 IP(比如 203.0.113.5,不能写 _、localhost 或留空):
<VirtualHost *:80>ServerName 203.0.113.5DocumentRoot "/var/www/denied"<Directory "/var/www/denied">Require all denied</Directory></VirtualHost>
确保 /var/www/denied 是个真实存在但为空或仅含提示页的目录,避免意外暴露内容。
紧接着配你的真实域名虚拟主机
这个必须紧接在上面那个之后,不能穿插其他配置。它的 ServerName 要和你实际用的域名完全一致(如 example.com),并且要启用访问权限:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:80>ServerName example.comServerAlias www.example.comDocumentRoot "/var/www/example"<Directory "/var/www/example">Require all granted</Directory></VirtualHost>
注意:ServerAlias 可选,但建议加上带 www 的变体,避免用户输错跳转失败。
确认 Apache 已加载该配置文件
检查主配置 httpd.conf(Linux 常在 /etc/httpd/conf/httpd.conf,Windows 常在 XAMPP\apache\conf\httpd.conf)中是否启用了包含语句:
- 找到类似
Include conf/extra/httpd-vhosts.conf的行,确保它没被注释(即前面没有#) - 确认没有
NameVirtualHost指令(Apache 2.4+ 不需要,保留会导致报错) - 确认
Listen 80未被注释或改掉
HTTPS 场景也要同步处理
如果网站已启用 HTTPS,*:443 的逻辑一样:在 httpd-vhosts.conf 中对应位置,加一个 <VirtualHost *:443>,ServerName 写你的 IP,配上 SSLEngine On、证书路径,以及 Require all denied。否则 HTTPS 下输 IP 仍可能成功访问。
改完保存,执行 sudo systemctl restart apache2(Debian/Ubuntu)或 sudo systemctl restart httpd(CentOS/RHEL),或 Windows 下重启 Apache 服务。验证时分别用 IP 和域名访问,结果应明确区分。

















