Apache单IP多域名绑定需通过Name-based Virtual Host实现:在httpd.conf中启用NameVirtualHost *:80,配置多个<VirtualHost *:80>块,每个块用ServerName指定不同域名、DocumentRoot指向对应网站目录,所有请求依Host头路由,无需为每个域名分配独立IP。

Apache 二进制安装(即非包管理器安装,如从官网下载 tar.gz 源码编译或官方预编译二进制包)下实现“单个域名绑定多个 IP”,本质不是让一个域名指向多个 IP 同时响应,而是让 Apache **在多个 IP 地址上监听同一域名的请求**,并统一由同一个虚拟主机处理。这常见于高可用、负载前置(如多网卡/多线路)、或 CDN 回源场景。
确认服务器已配置多个 IP
Apache 本身不分配 IP,它只监听操作系统已启用的 IP 地址。所以第一步是确保这些 IP 已实际绑定到网卡:
- Linux:用 ip addr add 或修改 /etc/sysconfig/network-scripts/ifcfg-*(CentOS)或 /etc/netplan/*.yaml(Ubuntu 20+)添加额外 IP
- Windows:在「网络连接」→「属性」→「IPv4」中手动添加多个 IPv4 地址
- 执行 ip addr show(Linux)或 ipconfig(Windows)验证所有目标 IP(如 192.168.1.100、192.168.1.101、2001:db8::1)已生效
配置 Apache 监听全部目标 IP(或通配)
编辑主配置文件(通常为 conf/httpd.conf,二进制安装路径以你解压位置为准,例如 /opt/apache2/conf/httpd.conf):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 找到 Listen 指令,改为显式监听每个 IP 和端口,例如:
Listen 192.168.1.100:80
Listen 192.168.1.101:80
Listen [2001:db8::1]:80 - 或更简洁地使用通配符(推荐):
Listen *:80 —— 表示监听所有 IPv4/IPv6 地址的 80 端口,前提是系统已启用对应 IP - 确保 ServerName 设置为你的真实域名,例如:
ServerName example.com
定义单域名虚拟主机(基于名称匹配)
关键点:不用为每个 IP 写一个 <VirtualHost>,而是用 Name-based Virtual Host,靠 HTTP 请求头中的 Host 字段区分——所有 IP 上来的、Host 头为 example.com 的请求,都交给同一个站点处理:
- 启用名称虚拟主机支持(若未启用):
NameVirtualHost *:80(旧版 Apache 2.2 需显式声明;Apache 2.4+ 默认启用,可省略) - 添加唯一一个虚拟主机块:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot "/opt/apache2/htdocs/example"
<Directory "/opt/apache2/htdocs/example">
Require all granted
</Directory>
</VirtualHost> - 注意:
<VirtualHost *:80>中的*表示“任意 IP”,不是占位符——它匹配所有已监听的 IP 地址
验证与测试
完成配置后:
- 运行 bin/apachectl configtest(二进制安装路径下的命令)检查语法是否正确
- 重启服务:bin/apachectl restart
- 在客户端用不同方式访问,确认均能命中:
•curl -H "Host: example.com" http://192.168.1.100
•curl -H "Host: example.com" http://192.168.1.101
• 浏览器直接访问http://example.com(前提是 DNS 已将域名解析到任一绑定 IP)

















