虚拟主机

有三种实现方案:

    基于ip:为每个虚拟主机准备至少一个ip地址

    基于port:为每个虚拟主机使用至少一个独立的port

    基于FQDN:为每个虚拟主机使用至少一个FQDN

 注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,一般先禁用main主机

   禁用方法:注释中心主机的DocumentRoot指令即可

 说明:当有虚拟主机的时候,默认站点是虚拟主机的第一个站点

     基于FQDN的方式是根据http报文首部来确定客户端访问的是哪个站点 

虚拟主机的配置方法:

<VirtualHost IP:PORT>

ServerName FQDN     当基于RQSN的时候这一项才起作用

DocumentRoot “/path"

</VirtualHost>

建议:上述配置存放在独立的配置文件中

其它可用指令:

ServerAlias:虚拟主机的别名;可多次使用

ErrorLog: 错误日志

CustomLog:访问日志

<Directory “/path">

</Directory>


如下实验每次修改完httpd配置文件之后都需要service httpd reload重新加载文件


centos6:

一、基于IP的虚拟主机示例

前提是准备多个ip,并且每个ip对应一个站点,方便测试

   ip addr add 192.168.119.10/24 dev eth0

   ip addr add 192.168.119.20/24 dev eth0

   ip addr add 192.168.119.30/24 dev eth0

mkdir /app/site1 /app/site2 /app/site3

echo /app/site1/index.html > /app/site1/index.html

echo /app/site2/index.html > /app/site2/index.html

echo /app/site3/index.html > /app/site3/index.html

  vim /etc/httpd/conf.d/test.conf

    <VirtualHost 192.168.119.10:80>

    DocumentRoot "/app/site1"

    </VirtualHost>


    <VirtualHost 192.168.119.20:80>

    DocumentRoot "/app/site2"

    </VirtualHost>

 

    <VirtualHost 192.168.119.30:80>

    DocumentRoot "/app/site3"

    </VirtualHost>

d465bcf12534f37986b7b829999db75f.jpg

测试:    curl http://192.168.119.10

      curl http://192.168.119.20

      curl http://192.168.119.30

e368458df7809a5c942ed92252fdbed4.jpg 

但是使用ip访问不现实,所以在客户端模拟出dns,然后使用域名来访问

      vim /etc/hosts  添加三行

      192.168.119.10 www.a.com

      192.168.119.20 www.b.com

      192.168.119.30 www.c.com

24ba56b345fbf8eb5af1b2f9d53cb241.jpg 

测试:

        curl http://www.a.com

        curl http://www.b.com

        curl http://www.c.com

8c72b5aab1c0c767e469186118c933b7.jpg

二、基于端口的虚拟主机(可和基于IP的虚拟主机混和使用)

   vim /etc/httpd/conf.d/test.conf

        listen 8001

        listen 8002

        listen 8003

        <VirtualHost *:8001>

        DocumentRoot "/app/site1"

        </VirtualHost>

 

        <VirtualHost *:8002>

        DocumentRoot "/app/site2"

        </VirtualHost>

 

        <VirtualHost *:8003>

        DocumentRoot "/app/site3"

        </VirtualHost>

ba6b5c800fbef549889abefd174fd2e7.jpg 

测试:

     curl http://192.168.119.129:8001

     curl http://192.168.119.129:8002

     curl http://192.168.119.129:8003

5bb5a4a6b0c684db20233780b3ebfa76.jpg 

同样可以模拟dns使用域名访问而不需要输入ip

     vim /etc/hosts

  192.168.119.129 www.a.com www.b.com www.c.com

测试:

      curl http://www.a.com:8001

        curl http://www.b.com:8002

        curl http://www.c.com:8003

三、基于FQDN的虚拟主机:

  准备条件:在客户端模拟三个站点的解析

    vim /etc/hosts

        192.168.119.129 www.a.com www.b.com www.c.com

    03fb255f55bc55d11a7b2e68483d4353.jpg   

服务器端配置:

   vim /etc/httpd/conf.d/test.conf

     NameVirtualHost *:80       httpd2.4不需要此指令

 

     <VirtualHost *:80>

      ServerName www.a.com

      DocumentRoot "/app/site1"

       errorlog  logs/a.com.errlog  错误日志

       customlog logs/a.com.accesslog combined  访问日志

      </VirtualHost>

 

      <VirtualHost *:80>

      ServerName www.b.net

      DocumentRoot "/app/site2"

       errorlog  logs/b.com.errlog  错误日志

       customlog logs/b.com.accesslog combined  访问日志

      </VirtualHost>

 

      <VirtualHost *:80>

      ServerName www.c.org

      DocumentRoot "/app/site3"

       errorlog  logs/c.com.errlog  错误日志

       customlog logs/c.com.accesslog combined  访问日志

      </VirtualHost>

cb5ea5c35689bcc6bcf026ad892ab86d.jpg

测试:

     curl http://www.a.com

     curl http://www.b.com

     curl http://www.c.com

537c44d0ae928ed871a9934ebda7e681.jpg

    curl http://192.168.119.129/

      默认站点是第一个站点

a90006bc49f2f224629354c34a6bec18.jpg 


centos7: 

与centos6大致一样,只是必须对目录显示授权,而且不需要NameVirutalHost指令。

 比如实现基于FQDN的虚拟主机,配置文件代码如下:

cat /etc/httpd/conf.d/test.conf

    <VirtualHost *:80>

ServerName www.a.net

DocumentRoot "/app/site1"

<Directory "/app/site1">

Require all granted      对目录显示授权

</Directory>

</VirtualHost>

        

     <VirtualHost *:80>

ServerName www.b.net

DocumentRoot "/app/site2"

<Directory "/app/site2">

Require all granted

</Directory>

</VirtualHost>

        

     <VirtualHost *:80>

ServerName www.c.net

DocumentRoot "/app/site3"

<Directory "/app/site3">

Require all granted

</Directory>

</VirtualHost>

以上就是虚拟主机的实验过程,如有疑问,欢迎留言

j_0080.gif