众所周知,一台物理服务器只能运行一个站点,但虚拟主机的的实现可以让一台物理

主机运行多个站点,具有很大的实用价值
 
实现虚拟主机有三种不同的方式:
基于IP的虚拟主机:使用不同的IP地址提供不同的站点
基于端口的虚拟主机:使用不同的端口提供不同的站点
基于主机头的虚拟主机:使用不同的主机名提供不同的站点
 
下面让这三种方式分别给予实现:
 
实现平台为apache-2.4.3;其实现的服务httpd监听端口为80端口
实现虚拟主机先注释掉主配置文件/etc/httpd/conf/httpd.conf中的中心主机项:
  1. #DocumentRoot "/var/www/html" 
1、基于IP的虚拟主机实现:
本机的ip地址为172.16.14.1;还需要再添加一个IP地址
 
  1. # ifconfig eth0:0 172.16.14.2/16 
在主配置文件:/etc/httpd/conf/httpd.conf;添加如下内容:
  1. <VirtualHost 172.16.14.1:80
  2.     DocumentRoot "/web/site1" 
  3.     ServerName 172.16.14.1 
  4. </VirtualHost> 
  5. <VirtualHost 172.16.14.2:80
  6.     DocumentRoot "/web/site2" 
  7.     ServerName 172.16.14.2 
  8. </VirtualHost> 
在上面添加了两个站点site1,site2,
为其创建两个目录:
  1. # mkdir -pv /web/{site1,site2} 
为站点1提供网页:
  1. # vim /web/site1/index.html 添加如下内容: 
  2.  
  3. <html> 
  4. <title>site1</title> 
  5. <h1>www.magedu.com</h1> 
  6. </html> 
为站点2提供网页:
  1. # vim /web/site2/index.html 添加如下内容: 
  2.  
  3. <html> 
  4. <title>site2</title> 
  5. <h1>www2.magedu.com</h1> 
  6. </html> 
检查语法:
  1. # httpd -t  
重启服务:
  1. # service httpd restart 
测试网页结果:站点1:

虚拟主机的三种实现方式_apache

站点2::

虚拟主机的三种实现方式_apache_02

2、基于端口的虚拟主机实现
 
在配置文件/etc/httpd/conf/httpd.conf添加8080监听端口
  1. Listen 80 
  2. Listen 8080 
设置主配置文件:/etc/httpd/conf/httpd.conf
  1. <VirtualHost 172.16.14.1:80
  2.     DocumentRoot "/web/site1" 
  3.     ServerName 172.16.14.1 
  4. </VirtualHost> 
  5. <VirtualHost 172.16.14.1:8080
  6.     DocumentRoot "/web/site2" 
  7.     ServerName 172.16.14.2 
  8. </VirtualHost> 
重启服务:
刷新页面显示:
80端口页面为:

虚拟主机的三种实现方式_apache_03

8080端口:

虚拟主机的三种实现方式_apache_04

3、同时使用IP和端口的虚拟主机实现
添加第三个站点:
  1. <VirtualHost 172.16.14.2:80
  2.     DocumentRoot "/web/site3" 
  3.     ServerName 172.16.14.2 
  4. </VirtualHost> 
为第三个站点设置目录和添加页面内容:
  1. # mkdir -pv /web/site3 
  2. # vim /web/site3/index.html 
  3. <html> 
  4. <title>site3</title> 
  5. <h1>www3.magedu.com</h1> 
  6. </html> 
重启服务:
  1. # service httpd restart 
第三个站点显示页面:

虚拟主机的三种实现方式_apache_05

 

 

4、基于IP和端口的虚拟主机不常用,常用的是基于域名的虚拟主机基于域名的

  虚拟主机的IP和端口是一样的,不同之处是ServerName.

  <VirtualHost>容器就是基于ServerName来判定虚拟主机是相对于哪一个站点来访问的.

  而基于域名的虚拟主机在apache2.2以后必须要启用配置文件中的NameVirtualHost *:80 

  1. NameVirtualHost www.magedu.com:80 

在本机进行域名解析测试:

  1. # vim /etc/hosts     添加: 
  2. 172.16.14.1        www.magedu.com  www 
  3. 172.16.14.1        www2.magedu.com  www2 

重启服务,测试结果:

虚拟主机的三种实现方式_httpd_06

 

以上就是用apache实现不同的虚拟主机过程,根据实际需要,在容器中可添加相关的应用:
 
  1. <VirtualHost *:80
  2.     ServerAdmin  
  3.     DocumentRoot   ##网页文件路径
  4.     ServerName   ##主机名
  5.  
  6.     ErrorLog logs/ ##定义网站的错误日志
  7.     CustomLog logs/  ##定义网站的访问日志
  8. #</VirtualHost>