當然主要有技術含量的是點DNS的解析,我正給我們公司負責,先查資料的說...‘
我們通常所說的虛擬主機技術就是將一台(或者一組)服務器的資源(系統資源、網絡帶寬、存儲空間等)按照一定的比例分割成若干台相對獨立的“小主機”的技術。每一台這樣的“小主機”在功能上都可以實現WWW、FTP、Mail等基本的Internet服務,就像使用獨立的主機一樣。
目前網站服務器的虛擬主機平台使用以開放的Apache為最多,其次是微軟的Windows IIS。Apache具有跨平台(FreeBSD/Linux/Windows/Solaris/Other UNIX)、易於維護與最佳安全性等優點。
Apache是率先支持基於IP虛擬主機的服務器之一。 Apache 1.1及其更新版本同時支持基於IP和基於主機名的虛擬主機,不同的虛擬主機有時會被稱為基於主機(host-based) 或非IP虛擬主機(non-IP virtual hosts)。
用Apache設置虛擬主機服務通常可以采用兩種方案:基於IP地址的虛擬主機和基於主機名字的虛擬主機,下面我們分別介紹一下它們的實現方法以及優缺點。以便大家在具體的應用中能夠選擇最合適的實現方法。
一、Apache實現基於IP地址的虛擬主機(每個站點擁有一個獨立IP地址)
使用這種虛擬主機方式,首先要在服務器上為每個虛擬主機單獨設置一個IP地址。這些IP地址可以通過增加多個網卡或者在一個網卡上設立多個IP地址來完成。有了多個IP地址後,可以采用以下兩種方式之一來設置Apache。
1、為每個虛擬主機運行一份Apache
采用這種方式,每一份Apache程序可以以單獨的用戶運行,因此各個虛擬主機之間互不影響。設置這種虛擬主機時,只要為每一份Apache設置一套配置文件就可以了,唯一需要注意的是:必須使用“Listen”語句,強制每一份Apache 僅僅在屬於“自己”的IP地址上接收服務請求。
優點:各個虛擬主機之間互不干擾,安全性高。
缺點:占用系統資源較多。
2、多個虛擬主機共享同一份Apache
采用這種方式,各個虛擬主機共享同一份Apache,因此各個虛擬主機之間有一定的影響,尤其是執行CGI程序時,可能會帶來一些嚴重的安全問題。設置這種虛擬主機時,只要為每一個虛擬主機設置類似如下的信息即可:
<VirtualHost www.ghq1.com>
DocumentRoot /www/ghq1
…
</VirrualHost>
優點:占用系統資源比上一種方式少。
缺點:安全性低,每個虛擬主機仍然需要占用一個IP地址。
例如服務器一個網卡上綁定有兩個IP地址(172.16.3.40和 172.16.3.50)分別對應域名 www.ghq1.com和www.ghq2.org的服務,配置如下:
服務器配置(apache的配置文件httpd.conf)
Listen 80
<VirtualHost 172.16.3.40>
DocumentRoot /www/ghq1
ServerName www.ghq1.com
</VirtualHost>
<VirtualHost 172.16.3.50>
DocumentRoot /www/ghq2
ServerName www.ghq2.org
</VirtualHost>
配置簡單說明:“Listen”默認httpd服務會監控第80號通信端口, “Listen”選項讓用戶自行指定apache 服務器監控的IP地址或通信端口。
“DocumentRoot”:指定apache 服務器存放網頁的根目錄;“ServerName”:允許用戶自行設置主機名,這個名稱將被送到遠程連接程序,以取代安裝apache 服務器主機的真實名稱。<VirtualHost IP >和</VirtualHost>構成虛擬主機的語法結構,其中的IP就是我們在服務器上綁定的不同的IP地址,也可以是IP地址加上通信端口號(見下面的例子)。
如果服務器有兩個IP地址(172.16.3.40和 172.16.3.50)分別對應域名 www.ghq1.com和www.ghq2.org。對每個域名,我們都希望在80端口和8080端口發布我們的網站。可以這樣配置:
服務器配置(apache的配置文件httpd.conf)
Listen 172.16.3.40:80
Listen 172.16.3.40:8080
Listen 172.16.3.50:80
Listen 172.16.3.50:8080
<VirtualHost 172.16.3.40:80>
DocumentRoot /www/ghq1-80
ServerName www.ghq1.com
</VirtualHost>
<VirtualHost 172.16.3.40:8080>
DocumentRoot /www/ghq1-8080
ServerName www.ghq1.com
</VirtualHost>
<VirtualHost 172.16.3.50:80>
DocumentRoot /www/ghq2-80
ServerName www.ghq1.org
</VirtualHost>
<VirtualHost 172.16.3.50:8080>
DocumentRoot /www/ghq2-8080
ServerName www.ghq2.org
</VirtualHost>
因此,建立虛擬主機,我們要做好不同的IP對應的域名解析工作,建立相應的目錄(如/www/ghq1),將相應的主頁內容存放在相應的目錄中即可。
二、Apache實現基於主機名的虛擬主機服務(一個IP地址實現多個網站)
基於主機名字的虛擬主機服務,是目前虛擬主機比較常用的一種方案。因為它不需要更多的IP地址,無須什麼特殊的軟硬件支持。而且現在的浏覽器大都支持這種虛擬主機的實現方法。基於域名的的虛擬主機是根據客戶端提交的HTTP頭中的關於主機名的部分決定的。使用這種技術,很多虛擬主機可以享用同一個IP地址。
基於域名的虛擬主機相對比較簡單,因為我們只需要配置DNS服務器將每個主機名映射(CNAMES)到正確的IP地址,然後配置Apache HTTP服務器,令其辨識不同的主機名就可以了。基於域名的服務器也可以緩解IP地址(IPV4)不足的問題。這種方式下,各個虛擬主機共享同一份Apache,因此有CGI程序運行時,安全性也不高。
優點:只要一個IP地址就可以提供大量的虛擬主機服務。
缺點:安全性差。維護這些虛擬主機時需要更改配置文件,並且需要重新啟動Apache進程才能起作用。因此不適合進行大規模的虛擬主機服務。
如果服務器只有一個IP地址,而在DNS中有很多映射到這個機器。我們想要在這個機器上運行www.ghq1.com和 www.ghq2.org兩個站點。在Apache服務器的配置中創建一個虛擬主機並不會自動在DNS中對主機名做相應更新。我們必須自己在DNS中添加域名來指向我們的IP地址。否則別人是無法看到我們的web 站點。
服務器配置(apache的配置文件httpd.conf)
# Ensure that Apache listens on port 80
Listen 80
# Listen for virtual host requests on all IP addresses
NameVirtualHost *
<VirtualHost *>
DocumentRoot /www/ghq1
ServerName www.ghq1.com
# Other directives here
</VirtualHost>
<VirtualHost *>
DocumentRoot /www/ghq2
ServerName www.ghq2.org
# Other directives here
</VirtualHost>
因為*(星號)匹配所有的地址,所以主服務器不接收任何請求。因為 www.ghq1.com首先出現在配置文件中,所以它擁有最高優先級,可以認為是默認或首要服務器。這意味著如果一個接受的請求不能與某個ServerName指令相匹配, 它將會由第一個VirtualHost所伺服。
當我們的IP地址無法確定的時候,使用*是很方便的--比如說, ISP給我們配置的是動態IP地址(如ADSL撥號上網),而我們有使用了某種動態域名解析系統時。因為*匹配任何IP 地址,所以在這樣的情況下,不論IP地址如何變化,我們都不需要另外進行配置。上述配置就是我們在絕大多數情況下使用基於域名的虛擬主機