16.6.3 基于主机名的虚拟主机服务
由于基于IP地址的虚拟主机服务有如上的缺点,HTTP 1.1协议中增加了对基于主机名的虚拟主机服务的支持。具体地说,当客户程序向Web服务器发出请求时,客户想要访问的主机名也通过请求头中的“Host:”语句传递给Web服务器。Web服务器程序接收到这个请求后,可以通过检查“Host:”语句来判定客户程序请求是哪个虚拟主机的服务,然后再做进一步的处理。通过这样的方式,提供虚拟主机服务的机器上只要设置一个IP地址,理论上就可以给无数多个虚拟域名提供服务。这样占用资源少,管理方便,所以目前基本上都是使用这种方式来提供虚拟主机服务。
与基于IP地址的虚拟主机服务的配置方法略有不同,用户必须在httpd.conf配置文件中使用NameVirtualHost参数,其格式如下所示。
NameVirtualHost IP地址/主机名[:端口]
该参数告诉Apache服务器,这里配置的是一个基于主机名的虚拟主机,使用的IP地址为参数中所设置的IP地址或主机名对应的IP地址。下面还是以前面的例子基础来演示基于主机名的虚拟主机的配置步骤。
(1)在/etc/hosts中添加如下的内容:
172.20.17.55 www.server1.com
172.20.17.55 www.server2.com
(2)在/usr/local/apache2/htdocs目录下建立两个目录server1_name和server2_name,并分别在这两个目录下生成一个index.html文件,其内容如下所示。server1_name目录下的内容/usr/local/apache2/htdocs/server1_name/index.html如下:
<HTML>
<HEAD>
<TITLE>基于主机名的虚拟主机测试</TITLE>
</HEAD>
<BODY>
基于主机名的虚拟主机测试:<FONT SIZE="6">www.server1.com</FONT>
</BODY>
</HTML>
server2_name目录下的内容/usr/local/apache2/htdocs/server2_name/index.html如下:
<HTML>
<HEAD>
<TITLE>基于主机名的虚拟主机测试</TITLE>
</HEAD>
<BODY>
基于主机名的虚拟主机测试:<FONT SIZE="6">www.server2.com</FONT>
</BODY>
</HTML>
(3)打开httpd.conf配置文件并添加如下内容:
#使用NameVirtualHost参数,设置基于主机名的虚拟主机服务使用的IP地址是172.20.17.55
NameVirtualHost 172.20.17.55
#使用VirtualHost段配置主机名www.server1.com的虚拟主机服务
<VirtualHost 172.20.17.55>
#使用ServerAdmin参数设置管理员邮箱
ServerAdmin admin@company1.com
#使用DocumentRoot参数设置网站文档的根目录
DocumentRoot /usr/local/apache2/htdocs/server1_name
#使用ServerName参数设置服务器名
ServerName www.server1.com
#使用ErrorLog参数设置Apache错误日志位置
ErrorLog /usr/local/apache2/logs/error_server1.log
</VirtualHost>
#使用VirtualHost段配置主机名www.server2.com的虚拟主机服务
<VirtualHost 172.20.17.55>
#使用ServerAdmin参数设置管理员邮箱
ServerAdmin admin@company2.com
#使用DocumentRoot参数设置网站文档的根目录
DocumentRoot /usr/local/apache2/htdocs/server2_name
#使用ServerName参数设置服务器名
ServerName www.server2.com
#使用ErrorLog参数设置Apache错误日志位置
ErrorLog /usr/local/apache2/logs/error_server2.log
</VirtualHost>
(4)重启Apache服务使更改生效。现在,通过浏览器访问http://www.server1.com/将返回如图16.35所示的页面,如访问http://www.server2.com/则将返回如图16.36所示的页面。虽然返回的页面内容不同,但实际上它们都是在访问同一个Apache服务器。
图16.35 www.server1.com的虚拟主机服务
图16.36 www.server2.com的虚拟主机服务