servername仅用于匹配host头并路由请求,不参与ip访问控制;真正的ip段限制必须在内的或块中,通过require all denied/granted配合/及require ip或require not ip指令实现。

1. 明确 ServerName 的作用
ServerName 是匹配 Host 请求头的标识符,仅决定 Apache 把请求路由给哪个虚拟主机。它不会过滤 IP、不参与授权判断。写成 ServerName 192.168.1.100 也不能阻止或放行该 IP —— 这是常见误解。
2. 在 VirtualHost 内部做 IP 段控制
权限规则必须嵌入到对应站点的 <virtualhost></virtualhost> 块中,且需包裹在 <directory></directory> 或 <location></location> 内。例如,只允许 10.0.0.0/8 和 172.16.0.0/12 访问:
- 先声明默认策略:
Require all denied(全拒)或Require all granted(全放) - 再叠加具体规则:
Require ip 10.0.0.0/8和Require ip 172.16.0.0/16 - 用
<requireall></requireall>或<requireany></requireany>组织逻辑(白名单场景推荐<requireany></requireany>)
示例配置片段:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<virtualhost>
ServerName example.com
DocumentRoot "/var/www/example"
<directory>
Require all denied
<requireany>
Require ip 10.0.0.0/8
Require ip 172.16.0.0/16
Require ip 127.0.0.1
</requireany></directory></virtualhost>
效果:只有来自这三个网段或本机的请求能通过;其余全部返回 403。
3. 黑名单式限制(拒绝特定网段)
若目标是“禁止某网段”,更简洁的做法是默认放行 + 单独拒绝:
- 写
Require all granted作为基础策略 - 加一行
Require not ip 192.168.5.0/24
注意:Require not ip 必须与 Require all granted 共存,且不能放在 <requireall></requireall> 里混用 Require ip,否则可能因逻辑冲突导致全拒。
4. 验证与生效关键点
- 修改后务必运行
apachectl configtest确认语法正确(输出 “Syntax OK”) - 重启或重载服务:
systemctl reload apache2(Debian/Ubuntu)或systemctl reload httpd(RHEL/CentOS) - 若用 XAMPP,需编辑
xampp\apache\conf\httpd.conf或httpd-vhosts.conf,且路径中的斜杠方向要匹配系统(Windows 用反斜杠或正斜杠均可,但引号内路径需一致) - IPv6 地址需带前缀长度,如
Require ip 2001:db8::/32,写成2001:db8::无效










