虚拟主机可以实现多站点共存,当站点的访问量不大时,为了节省资源(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的配置文件的添加如下内容:

wKioL1PnQaPg-F-1AADYnN1AQfo186.jpg

配置完成后检查语法并重启服务:# httpd -t  # service httpd restart

wKiom1PnQEKy9t_yAAFYUlrUK-s198.jpg


二、基于端口的虚拟主机:

基于端口的虚拟主机实现,设定www.a.org使用192.168.1.133的80端口,www.b.net使用192.168.1.133的8080端口,修改配置文件如下:

wKiom1PnRjeAmYvcAADhgx97Zpo141.jpg

注意:基于不同端口的虚拟主机在实现时由于添加了新的端口,所以需要添加指定监听的端口:

wKiom1PnRwzxFT9-AAA-Itq-AHI719.jpg

更改监听的端口后,需要重启服务从能生效,# service httpd restart。

另外如果使用IE浏览器测试时,如果是测试www.b.net这个虚拟主机,需要在浏览器内输入http://192.168.1.133:8080,不能简单的输入192.168.1.133:8080,否则显示找不到网页。正常的测试结果如下:

wKioL1PnSN6APrwvAAFGOi6bZjw400.jpg

wKioL1PnSP_wuWmjAAFZcuICp2Q223.jpg

三、基于主机名实现虚拟主机

实现基于主机名称的虚拟主机要求主机名称必须不同,另外除了需要在配置文件中注释掉中心主机的DocumentRoot指令对应的行以外还需要启用NameVirtualHost指令对应的行,默认情况下基于名称的虚拟主机监听在80端口。

wKioL1PnSbuQnlxlAAAtHX1nR_c052.jpg

设定我们的两个虚拟主机www.a.org和www.b.net都监听在192.168.1.133的80端口上,配置如下图:

wKiom1PnSbCxtv2ZAADCOM8-ZVk636.jpg

配置基于名称的虚拟主机时,如果在NameVirtualHost指令后指定监听的所有地址,那么在虚拟主机的定义中要保持一致,如果指定的是IP地址,那么虚拟机中也使用IP地址,而不要用表示所有地址的*,否则会报个错误,意思是两个虚拟主机使用了相同的IP地址和端口,发生了重叠,具体的报错信息如下:

wKiom1PnT5yDbGwIAAE5PjPbNJ8686.jpg

建议使用指定IP地址的方式显式的表明哪些虚拟主机是基于名称的方式的。

如果在windows操作系统内测试,需要在系统目录的windows/system32/drivers/etc/hosts文件内添加对应的解析条目,才可以正常的解析设置的虚拟主机名称,测试结果如下:

wKiom1PnT9yBBiofAAFj1x4QaOs433.jpg



wKioL1PnUQCQigGHAAFyRsKpBD0074.jpg