LAMP网站开发黄金组合Linux+Apache+MySQL+PHP
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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地址才能保证在同一台机器实现不同的虚拟主机。