apache基于ip地址的虚拟主机本质是通过网卡绑定多个ip并为每个ip配置独立virtualhost块,实现单服务器响应不同ip的http请求;需完成多ip配置、独立站点目录与权限设置、指定ip:端口的virtualhost定义,并禁用namevirtualhost。
apache 基于 ip 地址的虚拟主机,本质是让一台服务器响应多个不同 ip 的 http 请求,每个 ip 对应一个独立网站。它不依赖域名解析,适合测试环境或已有多个公网/私网 ip 的场景。关键在于:网卡绑定多 ip + 每个 virtualhost 明确指定 ip 和端口 + 独立文档根目录。
1. 为网卡添加额外 IP 地址
必须先让系统实际拥有多个可路由的 IP,不能只靠 DNS 或 hosts 映射。
- 临时添加(重启失效):
ip addr add 192.168.48.129/24 dev ens160ip addr add 192.168.48.130/24 dev ens160
执行后用ip a确认是否生效 - 永久生效(推荐):
使用nmcli(CentOS/RHEL 7+):nmcli connection modify ens160 +ipv4.addresses 192.168.48.129/24nmcli connection modify ens160 +ipv4.addresses 192.168.48.130/24nmcli connection up ens160
2. 创建站点目录与首页文件
每个虚拟主机需有专属的根目录和可访问的首页。
- 建立目录结构:
mkdir -p /www/129 /www/130 - 写入简单测试页:
echo "<h1>Site on 192.168.48.129</h1>" > /www/129/index.htmlecho "<h1>Site on 192.168.48.130</h1>" > /www/130/index.html - 确保 Apache 有读取权限:
chown -R apache:apache /www(RHEL/CentOS)
或chown -R www-data:www-data /www(Debian/Ubuntu)
3. 配置 VirtualHost 块(推荐放 conf.d/ 下)
避免直接修改主配置文件,统一放在 /etc/httpd/conf.d/vhost-ip.conf(RHEL系)或 /etc/apache2/sites-available/(Debian系)。
内容示例(注意:IP 后必须带 :80,且无多余空格):
<directory>
AllowOverride None
Require all granted
</directory><virtualhost>
ServerName 192.168.48.129
DocumentRoot /www/129
</virtualhost><virtualhost>
ServerName 192.168.48.130
DocumentRoot /www/130
</virtualhost>
⚠️ 注意:
– 不要启用 NameVirtualHost(仅用于基于域名的配置);
– ServerName 可填 IP 或任意标识名,不影响路由逻辑;
– 若使用 SELinux,需运行 setsebool -P httpd_read_user_content 1 允许读取非标准路径。
4. 启动并验证服务
完成配置后检查语法、重启并确认监听状态:
- 检查配置是否合法:
httpd -t(RHEL) 或apache2ctl configtest(Debian) - 重启服务:
systemctl restart httpd(RHEL) 或systemctl restart apache2(Debian) - 确认 80 端口在两个 IP 上均监听:
ss -tlnp | grep ':80'→ 应看到两行,分别绑定到 129 和 130 - 从客户端浏览器直接访问:
http://192.168.48.129和http://192.168.48.130,应显示各自首页











