Apache -- Virtual Hosts

所謂虛擬主機,就是指一臺服務器作爲多域名的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>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章