3.5 虚拟主机的设置
Web服务器提供的另一个服务就是虚拟域的主机功能,也称为虚拟主机。虚拟主机是一个完整的Web站点,有自己的域名,但是在同一台计算机上作为多个Web站点的主机。Apache通过在httpd.conf文件中设置指令的简单方法实现了该功能。
有两种方法在Apache服务器上设置虚拟主机。可以使用一个IP地址对应一个CNAME (Computer Name)的方法,也可以用一个IP地址对应多个CNAME。Apache有不同的指令集处理这些选项的每一种。
3.5.1 一个IP地址对应一个CNAME(IP型虚拟主机)
假设服务器的IP地址是15.2.40.9,欲在该机器上建立www.gong.com的虚拟主机。用Apache很容易实现这个功能。在httpd.conf文件的最后面可以看到类似于如下的代码:
# # VirtualHost: If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn't need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL:http://httpd.apache.org/docs-2.0/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option '-S' to verify your virtual host # configuration. # # Use name-based virtual hosting. # #NameVirtualHost * # # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for requests without a known # server name. # #<VirtualHost *> # ServerAdmin webmaster@dummy-host.example.com # DocumentRoot /www/docs/dummy-host.example.com # ServerName dummy-host.example.com # ErrorLog logs/dummy-host.example.com-error_log # CustomLog logs/dummy-host.example.com-access_log common #</VirtualHost>
修改上述代码中<VirtualHost *>和</VirtualHost>之间的部分,即可实现一个IP地址映射到一个虚拟主机上。
//设置虚拟主机 <VirtualHost 15.2.40.9> ServerAdmin webmaster@gong.com //虚拟主机网络管理员邮箱 DocumentRoot /www/docs/gong //虚拟主机主目录 ServerName gong.com //虚拟主机名称 ErrorLog logs/gong.com-error_log //虚拟主机错误日志文件 CustomLog logs/gong.com-access_log common //虚拟主机访问日志 </VirtualHost>
3.5.2 一个IP地址对应多个CNAME(名字型虚拟主机)
Web服务器可以获得访问它的浏览器所在主机的名称。基于这些名称,Apache可以被配置成能提供多个Web站点服务的形式,从而使DNS将这些站点都解析到同一个IP地址。用户可以试着在浏览器中输入“www.163.com”和“www.netease.com”,可以发现返回的页面完全相同。这是因为网易公司同时注册了这两个域名,而这两个域名对应的IP地址以及网站页面又完全一样。类似于这种两个不同域名的情况完全可以用一个Apache服务器实现。在Apache的虚拟主机设置部分,将两个不同域名映射到同一个IP地址,而且DocumentRoot也配置相同即可(当然网易公司并不一定是采用的Apache服务器,即使采用Apache服务器也可能是在不同IP地址的机器上分别安装Web服务器)。修改上述代码中<VirtualHost*>和</VirtualHost>之间的部分,即可以实现一个IP地址映射到多个虚拟主机上。
//设置第一个虚拟主机 <VirtualHost 15.2.40.9> ServerAdmin webmaster@gong.com //第一个虚拟主机网络管理员邮箱 DocumentRoot /www/docs/gong //第一个虚拟主机主目录 ServerName gong.com //第一个虚拟主机名称 ErrorLog logs/gong.com-error_log //第一个虚拟主机错误日志文件 CustomLog logs/gong.com-access_log common //第一个虚拟主机访问日志 </VirtualHost> <VirtualHost 15.2.40.9> ServerAdmin webmaster@chuck.com //第二个虚拟主机网络管理员邮箱 DocumentRoot /www/docs/ chuck.com //第二个虚拟主机主目录 ServerName chuck.com //第二个虚拟主机名称 ErrorLog logs/chuck.com-error_log //第二个虚拟主机错误日志文件 CustomLog logs/chuck.com-access_log common //第二个虚拟主机访问日志 </VirtualHost>
★ 注意 ★
如果系统只有一块网络适配卡,那么在<VirtualHost >中必须配置完全一样的IP地址才能保证在同一台机器实现不同的虚拟主机。