在不考虑虚拟的情况下,Apache可以提供一个站点,提供一个网站的运行平台给我们,但是它有不是站点,它只是一个运行的服务器,这个服务器我们通常叫它Host,有的时候称它为物理主机。

一、虚拟主机概念

什么情况下使用虚拟主机呢?什么又是虚拟主机呢?

我们要想实现一个web站点,而且能够在互联网上被访问,首先它再能运行在操作系统,而且这个操作系统还要运行在物理主机上(第一它是一个主机)。在互联网上能够被访问,那我们需要一个主机,需要一个IP地址,需要一个时时在线的服务器,这需要多少资源?对众多小型站点来讲或者说对某种需求来讲,有可能都用不到服务器,也就是每天就10个人左右访问,只是需要我们在线而已,如果我们就为这一点点的需求就投入重大的资源的话是非常浪费的。我们就期望能够像我们使用虚拟机一样,虚拟的OS一样或虚拟的PC一样,能够在一台物理主机上虚拟出来多个可以同时运行的站点或者我们把它称为主机因此就把它称为虚拟主机。

Apache

    中心主机【提示:不能同时使用】

      虚拟主机

         基于IP

             IP180(端口相同,IP地址不同)

         基于端口

             IP80 (IP地址相同,端口号不同)

          基于域名

             IP80(IP地址相同,douan主机名不同

二、安装httpd

    我们首先要安装yum库,我前面也重点讲了下如何配置yum库,这里我就不从服务器上下载了,我在这里就挂载光盘吧,这样没有看到前面yum库是如何配置的朋友们,这里也可以学一下。主要是在/etc/yum.repos.d/server.repo文件中填入配置文件(蓝色的字就是配置文件的内容)。

[root@localhost ~] # mkdir /mnt/cdrom 

[root@localhost ~] # mount /dev/cdrom /mnt/cdrom

[root@localhost ~] # vim /etc/yum.repos.d/server.repo

[base] 

name=server

baseurl=file:///mnt/cdrom/Server 

enabled=1

gpgcheck=0  

这时候我们就可以安装httpd了。

[root@localhost ~ ] # yum install httpd

三、基于IP地址的虚拟主机

    我们要创建虚拟主机首先要做的就是取消中心主机。我们要打开主配置文件,找到DocumentRoot给注释掉【提示:不懂查看(六)关系图】。

[root@localhost conf]# vim /etc/httpd/conf/httpd.conf

然后我们就在下面定义虚拟主机,为了管理方便我们也可以在/etc/httpd/conf.d/下面创建一个文件virtual.conf进行虚拟主机定义。我们使用httpd –t 可以检查配置文件的语法。

[root@localhost ~]# vim /etc/httpd/conf.d/virtual.conf

<VirtualHost 172.16.58.25:80>

        ServerName hello.shuaige.com

        DocumentRoot "/www/shuaige.com"

</VirtualHost>

<VirtualHost 172.16.58.12:80>

        ServerName hi.a.org

        DocumentRoot "/www/a.org"

</VirtualHost>

这时候我们还要在www下面创建两个目录,在里面各提供一个主页面,主页内容为蓝色的字。

[root@localhost ~]# mkdir -pv /www/{shuaige.com,a.org}

[root@localhost ~]# cd /www/shuaige.com

[root@localhost shuaige.com]# vim index.html

<title>shuaige</title>

<h1>shuaige.com</h1>

[root@localhost a.org]# vim index.html

<title>A</title>

<h1>a.org</h1>

注意这个时候我们根本就没有两个地址,所以这个时候我们要给第一个地址一个别名。

    我们重启一下httpd然后用浏览器测试一下。【提示:在测试之前一定要将selinux关闭】。下面的图片就是我们的测试结果。

[root@localhost a.org]# service httpd restart

[root@localhost conf.d]# setenforce 0

四、基于端口的虚拟主机

    在这里我们是不删除基于IP的地址又继续基于端口。我们这里还要进虚拟主机定义的那个文件中进行配置提示:蓝色的内容只是添加的内容)【提示:不懂查看(六)关系图

[root@localhost ~]# vim /etc/httpd/conf.d/virtual.conf

<VirtualHost 172.16.58.25:8080>

        ServerName hehe.b.net

        DocumentRoot "/www/b.net"

</VirtualHost>

 下面我们就要在/www/下面创建一个目录b.net。然后在里面创建一个主页面,内容为蓝色部分。

[root@localhost www]# mkdir b.net

[root@localhost www]# vim b.net/index.html

<title>B</title>

<h1>b.net</h1>

    这里我们不仅要配置这些,还要去主配置文件中将监听的端口加上去。然后重新启动httpd后,进行测试。

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf


五、基于域名的虚拟主机

    这里我们还要去虚拟主机定义的那个文件中进行配置。基于主机名的时候我们必须要说明在哪个地址上使用。【提示:不懂查看(六)关系图

[root@localhost ~]# vim /etc/httpd/conf.d/virtual.conf

NameVirtualHost 172.16.58.12:80

<VirtualHost 172.16.58.12:80>

        ServerName kan.c.gov

        DocumentRoot "/www/c.gov"

</VirtualHost>

    下面我们就要在/www/下面创建一个目录c.gov。然后在里面创建一个主页面,内容为蓝色部分。然后重启httpd。但是我们这一次要在本机测试的话,本机要能够解析这两个主机名,最简单的就是我们要编辑本机的hosts文件(图中有路径),如果里面没有找到的话,一定是隐藏了。去属性里面改为显示就行了。

[root@localhost www]# mkdir c.gov

[root@localhost www]# vim c.gov/index.html

<title>C</title>

<h1>c.gov</h1>

[root@localhost a.org]# service httpd restart

在里面添加这两行,后就可以重试了。

172.16.58.12     hi.a.org

172.16.58.12     kan.c.gov

六、关系图

   我这里将/etc/httpd/conf.d/virtual.conf里面的内容剪切出来做了一幅图,这样更形象的表现出,谁与谁之间的关系是基于什么来验证的。 

七、建立各自日志信息

我们这里就以第一个为例讲一下,我们要在定义虚拟主机文件中编辑一下。

[root@localhost ~]# vim /etc/httpd/conf.d/virtual.conf

    然后我们要到所对应的位置创建目录文件。例如:我们到/var/log/httpd目录下面创建shuaige.com目录,再在这个目录下创建access_logcombined两个文件。然后我们重启httpd后,再进行测试,测试后我们在查看一下access_log文件,里面就有信息了。

[root@localhost ~]# cd /var/log/httpd/shuaige.com

[root@localhost shuaige.com]# touch access_log

[root@localhost shuaige.com]# touch combined

附加:

    如果有的朋友想知道那些访问日志和错误日志信息都表示什么意思,例如:我们要查找combind中出现的句子是什么意思,可以进/etc/httpd/conf/httpd.conf文件中。

  1. 查找LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 都什么意思?    
  2.      %h:客户端地址(远程主机地址) 
  3.      %l:远端主机上的登录名称 
  4.      %u:登录网站的时候登录用户 
  5.      %t:日志事件产生事件 
  6.      %\“:\转译,显示“本身的意思 
  7.      %r:请求报文第一行 (方法、资源、版本号) 
  8.      %>s:%s状态码,最后一次请求的对应的状态码。 
  9.      %b:响应报文的大小 
  10.      %{Referer}i:表示从哪个页面上来的 
  11.      %{User-Agent}i:用户浏览器类型