虚拟主机可以实现多站点共存,当站点的访问量不大时,为了节省资源(IP,物理主机),可以将多个站点运行于一台物理主机。
一、基于IP的虚拟主机:
实现虚拟主机必须先将中心主机的配置注释掉,即禁用中心主机,只需要注释DocumentRoot指令对应的行,而后再定义虚拟主机。
基于IP的虚拟主机要求一台物理机上要有多个IP,每个虚拟主机分别监听在不同IP地址上,访问时可以基于虚拟主机的名称也可以使用IP地址的方式在浏览器界面内访问。比如,两台虚拟主机www.a.org和www.b.net,我们的物理主机有两个IP地址192.168.1.133和192.168.1.134,www.a.org运行在192.168.1.133的IP上,www.b.net运行在192.168.1.134上。
首先配置主机的第二块网卡:
# ifconfig eth0:0 192.168.1.134/24
创建虚拟主机使用的目录:
# mkdir /var/www/{hosta,hostb}
编辑两个虚拟主机使用的默认主页面,内容分别为www.a.org和www.b.net。
修改httpd的配置文件的添加如下内容:
配置完成后检查语法并重启服务:# httpd -t # service httpd restart
二、基于端口的虚拟主机:
基于端口的虚拟主机实现,设定www.a.org使用192.168.1.133的80端口,www.b.net使用192.168.1.133的8080端口,修改配置文件如下:
注意:基于不同端口的虚拟主机在实现时由于添加了新的端口,所以需要添加指定监听的端口:
更改监听的端口后,需要重启服务从能生效,# service httpd restart。
另外如果使用IE浏览器测试时,如果是测试www.b.net这个虚拟主机,需要在浏览器内输入http://192.168.1.133:8080,不能简单的输入192.168.1.133:8080,否则显示找不到网页。正常的测试结果如下:
三、基于主机名实现虚拟主机
实现基于主机名称的虚拟主机要求主机名称必须不同,另外除了需要在配置文件中注释掉中心主机的DocumentRoot指令对应的行以外还需要启用NameVirtualHost指令对应的行,默认情况下基于名称的虚拟主机监听在80端口。
设定我们的两个虚拟主机www.a.org和www.b.net都监听在192.168.1.133的80端口上,配置如下图:
配置基于名称的虚拟主机时,如果在NameVirtualHost指令后指定监听的所有地址,那么在虚拟主机的定义中要保持一致,如果指定的是IP地址,那么虚拟机中也使用IP地址,而不要用表示所有地址的*,否则会报个错误,意思是两个虚拟主机使用了相同的IP地址和端口,发生了重叠,具体的报错信息如下:
建议使用指定IP地址的方式显式的表明哪些虚拟主机是基于名称的方式的。
如果在windows操作系统内测试,需要在系统目录的windows/system32/drivers/etc/hosts文件内添加对应的解析条目,才可以正常的解析设置的虚拟主机名称,测试结果如下:
基于IP、端口和FQDN实现虚拟主机