所謂虛擬主機,就是指一臺服務器作爲多域名的Web服務器。ISP經常通過一臺服務器爲其客戶提供Web服務。而客戶通常希望主頁以自己的名字出現,而不是在該ISP的名字後面,因爲使用單獨的域名和根網址可以看起來更正式一些。傳統上,用戶必須自己設立一臺服務器才能達到擁有單獨域名的目的,然而這需要維護一個單獨的服務器。很多小單位缺乏足夠的維護能力,更爲合適的方式是租用別人維護的服務器。ISP也沒有必要爲一個機構提供一個單獨的服務器,完全可以使用虛擬主機的能力,使服務器爲多個域名提供Web服務,而且不同的服務互不干擾,對外就表現爲多個不同的服務器。虛擬主機就是解決這種問題的方案,使客戶的域名實際指向ISP的同一臺服務器。
1.Apache支持虛擬主機的方式
Apache有兩種支持虛擬主機的方式。一是爲每一個虛擬主機設置單獨的httpd進程,二是爲所有的主機設置一個單獨的httpd進程。
爲每一個虛擬機設置單獨的httpd進程
在httpd.conf文件的第一部分Global Environment中的BindAddress命令或Listen命令就是用來指定虛擬主機的地址和端口的。
BindAddress命令用來指定單一的地址,可以使用域名或IP地址。該命令在httpd.conf文件中只能出現一次。
Listen命令可以讓httpd進程監聽多個地址或端口。反覆使用Listen命令就能實現這個要求。
爲所有的主機設置一個單獨的httpd進程
這是一個常用的方法。用戶只要維護一個httpd.conf文件。在此文件的第三部分Virtual Host中,用<VirtualHost></VirtualHost>命令來爲所有的虛擬主機進行配置。有多個虛擬主機就有多個<VirtualHost>段。在不同的虛擬主機的<VirtualHost>段中可以指定不同的ServerAdmin、 ServerName、DocumentRoot、ErrorLog和TransferLog。
2.虛擬主機的實現方式
虛擬主機有三種實現方式:以主機名稱的方式虛擬、以IP的方式虛擬、以端口的方式虛擬。下面就舉一個在httpd.conf的第三部分Virtual Host中實現上面提及的方式的例子。
以主機名稱的方式虛擬
如果用戶的一臺服務器有多個域名,Virtual Host文件舉例如下:
NameVirtualHost 210.12.195.6
<VirtualHost hacker.com.cn>
ServerAdmin [email protected]
DocumentRoot /var/www/html/hacker
ServerName hacker.com.cn
</VirtualHost>
<VirtualHost pcfrient.com.cn>
ServerAdmin [email protected]
DocumentRoot /var/www/html/pcfrient
Servername pcfrient.com.cn
</VirtualHost>
以IP的方式虛擬
註冊域名是要花一筆費用的。解決方案是可以用IP的方式來虛擬。在Linux中可以爲一個網卡捆綁兩個IP地址。如服務器的地址是 210.12.195.6,現在有一個IP地址210.12.195.9沒有使用。將210.12.195.9捆綁到服務器的網卡中,執行下列命令:
#ifconfig eth0:0 210.12.195.9
這樣,服務器就有兩個IP地址了。以IP的方式虛擬和以主機名稱的方式虛擬類似,請看下面的例子:
NameVirtualHost 210.12.195.6
<VirtualHost 210.12.192.6>
ServerAdmin [email protected]
DocumentRoot /var/www/html/hacker
</VirtualHost>
<VirtualHost 210.12.192.9>
ServerAdmin [email protected]
DocumentRoot /var/www/html/pcfrient
</VirtualHost>
以IP的方式虛擬不用NameVirtualHost命令。
以主機名稱和IP的方式虛擬
就是上面的兩個方式的結合。看下面的例子:
NameVirtualHost 210.12.195.6
<VirtualHost hacker.con.cn>
ServerAdmin [email protected]
DocumentRoot /var/www/html/hacker
ServerName hacker.com.cn
</VirtualHost>
<VirtualHost 210.12.195.6>
ServerAdmin [email protected]
DocumentRoot /var/www/html/pcfrient
</VirtualHost>
以端口的方式虛擬
http默認的端口是80,如果用戶要開設另一個端口443作爲另一個虛擬主機,舉例如下:
Listen 80
Listen 443
<VirtualHost 210.12.192.6:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/hacker
</VirtualHost>
<VirtualHost 210.12.195.6:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html/pcfrient
</VirtualHost>
以不同的IP和端口的方式虛擬
該方式是以IP的方式虛擬和以端口的方式虛擬的結合。假設服務器捆綁了兩個IP地址,210.12.192.6和210.12.195.9,後面的IP地址用端口443。舉例如下:
Listen 210.12.192.6:80
Listen 210.12.195.9:443
<VirtualHost 210.12.192.6:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/hacker
</VirtualHost>
<VirtualHost 210.12.195.9:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html/pcfrient
</VirtualHost>