一、虚拟主机

1、什么是虚拟主机

   是一种让单一服务器可以运行多个网站或服务的技术。虚拟并非指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统可以是基于服务器群,或者单个服务器。

2、使用虚拟主机的目的

   1)方便管理

   所有的虚拟主机都在同一部主机中,因此彼此可以共用相同的组态设置,借此节省管理的人力与成本

   2)提高性能

   相同主机内的虚拟主机可以共用彼此的程序集(Process Pool),因此可以缩短对客户端的回应时间

   3)降低成本

   虚拟主机使得单一服务器的资源可以被更有效的利用,包括存储器、存储空间或处理器资源。因为通常服务单一网址所需的资源对整部服务器来说相当小,如此可让服务器的资源被更有效的利用。

多个虚拟服务器,可以通过软件架设在同一个实体服务器上,而每个虚拟服务器有可以提供服务器的所有功能,这样相对来说每个虚拟服务器的成本有一定程度的降低。

3、虚拟主机的实现方法
   我们在访问一个网络中的站点时,输入的是域名,而每一个域名对应的是一个IP和端口,所以对于虚拟主机的实现,主要有三种方式

   1)基于不同的IP实现不同的虚拟主机

       实现过程基于IP的变化

       如果你有多个站点的需要被访问的时候,而且使用了这种基于IP地址的,就是一个站点对应一个IP,那势必有点太浪费IP了,而且现在的IPv4已经消耗待尽,每年的使用费也不少啊,当然,土豪公司就不用这么纠结了。

   2)基于不同的port实现不同的虚拟主机

       实现过程基于端口的变化

       网络报文在传输过程中是基于IP+port的,以实现它的唯一性,所以除了变化IP可以实现虚拟主机外,通过端口的变化也是可以实现的。不过在访问互联网是,默认的都是80端口,如果你基于port变化,那别人在访问过程中,还需要输入端口号,这不是画蛇添足吗?不过,你也可以通过URL重写,实现将指定的端口跳到80端口上,这当然就不如这里介绍的第三种方法方便了。

   3)基于不同的FQDN实现不同的虚拟主机

       实现过程基于ServerName的变化

       在网络的访问过程中,当报文到达服务端以后,内核要负责拆掉IP报文的下四层封装,TCP、IP的都要拆掉,然后再交给用户空间的程序,而报文中除了有TCP和IP的封装,还有http的请求首部,请求首部中有一项叫HOST,里面写的就是在浏览器中输入的主机名,因此,我们完全可以通过根据不同的FQDN来实现在单台服务器上提供多个端点。而这种方法也正是目前各IDC们所使用的方法,你个人想要创建一个网站,难道还要买服务器,再托管到机房吗?NO,你所需要做的就是申请一个域名,再到淘宝买一个空间做绑定就可以了,而他们提供给你的,其实就是一个虚拟主机。

二、虚拟主机的实现过程

   本次过程基于httpd2.2实现,httpd2.4的实现过程和2.2的稍微有些不一样,它是把虚拟主机的那一项从主配置文件中单独拿出来了,但是实现原理还是一样的,只要开启相应的模块就可以了。虚拟主机在以后的使用过程中还再次会用到的,从此就都以2.4为准了。对于本文中的DNS配置,这里只做配置,不做说明,原理及详细介绍,请参考我的博客中关于DNS系列的博文。

   案例说明:www.a.com,www.b.com,www.c.com,三个站点放在同一台服务器上,基于DNS实现

1、为三个站点创建三个区域

基于FQDN实现Virtuahost_服务器

2、创建三个站点的区域文件数据库并填写资源记录,三个站点的IP和DNS都相同,只有主机名不同

   1)创建a.com的区域文件数据库并填写资源记录

基于FQDN实现Virtuahost_服务器_02

   2)创建b.com的区域文件数据库并填写资源记录

基于FQDN实现Virtuahost_服务器_03

   3)创建c.com的区域文件数据库并填写资源记录

基于FQDN实现Virtuahost_虚拟主机_04

3、检查DNS是否可以解析三个站点


   www.com.com解析成功,另外www.b.com和www.c.com也可以解析成功,这里就不再上图了

4、修改httpd的主配置文件

   虚拟主机的实现首先要关闭中心主机,关闭中心主机,只需要把/etc/httpd/conf/httpd.conf中的DocumentRoot注释掉就可以了,这里的这个主配置文件是httpd默认的位置,如果你在安装httpd过程中选择了指定位置,只需要找你的主配置文件就可以了。

   1)关闭中心主机

基于FQDN实现Virtuahost_虚拟主机_05

 2)配置VirtualHost,在httpd2.2中,NameVirtualHost这一项需启用,而且那个*:80需要和下面的各个VirtualHost中的保持一样,如果是*:80,就都是*:80;如果是IP:80,则都需要是IP:80。在httpd2.4中不需要此项。

基于FQDN实现Virtuahost_服务器_06

5、启动httpd服务和named服务,并检查端口是否已经成功监听


6、测试

   1)为了证明实验的有效性和真实性,这里的测试去windows客户端中进行,并把DNS服务器的地址改为刚才配置的服务器的IP地址

基于FQDN实现Virtuahost_虚拟主机_07

  2)访问下三个站点试试

基于FQDN实现Virtuahost_处理器_08

三个站点都可以通过DNS解析正常访问,实验成功,OK!