是的,基于IP的虚拟主机必须为每个站点分配唯一可路由的IP地址,可通过单网卡绑定多个IP(如ip addr add或配置文件)实现,Apache中每个<VirtualHost>块须严格匹配已配置的IP和端口,客户端直接访问对应IP即可区分站点。
是的,基于 ip 的虚拟主机必须让服务器拥有多个 ip 地址,但不一定需要多个物理网卡。
Apache 通过请求到达的目标 IP 地址来区分不同站点。所以每个虚拟主机必须对应一个唯一且可路由的 IP 地址。这个 IP 可以来自:
- 多块物理网卡(每块配一个 IP)
- 单块网卡绑定多个 IP(更常见、更实用)
单网卡绑定多个 IP 是标准做法
现代 Linux 系统支持为同一网卡配置多个 IP 地址,无需额外硬件。常用方法包括:
-
临时添加(重启失效):
ip addr add 192.168.10.100/24 dev ens33 ip addr add 192.168.10.101/24 dev ens33
验证:
ip addr show ens33,能看到多个inet行。 永久生效(推荐):
编辑网卡配置文件(如/etc/sysconfig/network-scripts/ifcfg-ens33或使用nmcli/nmtui),添加IPADDR1=...、PREFIX1=...等字段,或创建辅助配置文件。
注意:这些 IP 必须在同一子网内(或按路由策略可达),且不能冲突。
Apache 配置要严格匹配 IP
每个 <VirtualHost> 块必须写明具体 IP 和端口,例如:
<VirtualHost 192.168.10.100:80>
DocumentRoot /var/www/siteA
ServerName siteA.local
</VirtualHost>
<VirtualHost 192.168.10.101:80>
DocumentRoot /var/www/siteB
ServerName siteB.local
</VirtualHost>如果配置中写了 192.168.10.102,但系统没绑定该 IP,Apache 启动时会报错或忽略该虚拟主机。
客户端访问需能解析到对应 IP
由于基于 IP 的方式不依赖域名,客户端只需直接访问 http://192.168.10.100 或 http://192.168.10.101 即可。
若用域名测试,需在客户端 hosts 文件中做静态映射,例如:
192.168.10.100 siteA.local 192.168.10.101 siteB.local
否则 DNS 无法区分——毕竟两个域名可能解析到同一个 IP。
和基于域名的虚拟主机对比
| 特性 | 基于 IP | 基于域名 |
|---|---|---|
| 所需 IP 数量 | 每个站点一个独立 IP | 共享一个 IP |
| 是否需要多 IP | 必须 | 不需要 |
| SSL 支持(旧环境) | 可直接绑定证书 | 依赖 SNI(现代浏览器都支持) |
| 配置复杂度 | 略高(需系统层 IP 配置 + Apache 配置) | 更简洁(只改 Apache) |
不复杂但容易忽略


















