NT 下虛擬域名的實現(xiàn)
發(fā)布時間:2008-08-10 閱讀數(shù): 次 來源:網(wǎng)樂原科技
虛擬域名實際上是虛擬主機的一種。
虛擬主機的出現(xiàn)是為了節(jié)省硬件的投資。如果 ISP 為每個申請了域名的用戶都使用一臺單獨的機器,顯然費用會很高,而且對于訪問不是很頻繁的站點來說也是一種浪費。所以就出現(xiàn)了大家公用一臺機器,但每個用戶之間相互獨立,功能完全等同與擁有自己的主機。
虛擬主機分為基于 IP 地址的( IP-based )和基于名稱的( name-based )兩種。
基于 IP 地址的虛擬主機大家雖然在同一臺機器上,還是要給每個域名配置獨立的 IP 地址,這樣看來還不能算是一種很理想的方案。有沒有用一臺機器、一個 IP 地址,又能實現(xiàn)獨立的域名呢?
這個想法隨著 http/1.1 協(xié)議的出現(xiàn)得到了實現(xiàn)。它的原理是用 Web 服務(wù)器和瀏覽器共同作用來實現(xiàn)把虛擬的域名與相應(yīng)的目錄或站點對應(yīng)。這樣用戶在瀏覽器里輸入不同的名字,雖然由 DNS 服務(wù)器解析出的是同一個 IP ,但得到的卻是不同的內(nèi)容??瓷先ゾ拖髢蓚€獨立的域名了。所以這種基于名稱的虛擬主機又稱為非 IP 的( non-IP )。這同時還有一個用處,可以給很長的 URL 起一個即好記又有意義的別名。這就是虛擬域名。
實現(xiàn)虛擬域名要有兩方面的支持:
一是 Web 服務(wù)器:
現(xiàn)在有很多的 Web Server 支持基于名稱的虛擬主機。象 Netscape , IIS 等都支持。當(dāng)然用的最多的還是 Apache Web Server ,究其原因是因為它配置方便,還是免費的,而且它是第一個實現(xiàn)了基于名稱的虛擬主機的服務(wù)器產(chǎn)品。
二是用戶的瀏覽器:
我想大家使用的決大多數(shù)應(yīng)該是 3.0 版本以上的 IE 或 Netscape ,那就沒問題了,它們都支持。
下面我們就來看看在 NT 下如何實現(xiàn)虛擬域名:
第一步是要 DNS 服務(wù)器認(rèn)識你要增加的域名,也就是把它解釋成相應(yīng)的 IP 地址。因為我們要靠 Web 服務(wù)器來區(qū)分域名,所以這個 IP 地址自然得是你 Web Server 所管理的了。
你所要做的就是 DNS 服務(wù)中增加一個別名記錄,假定你要增加的是 aaa.domain.com ,想要指到 www.domain.com ,就可寫成:
aaa IN CNAME www.domain.com.
也許你會想如果我要增加很多域名,那不是很麻煩,而且 DNS 服務(wù)器的記錄文件要很大嘍。好,我們來騙一下 DNS 服務(wù)器,把“ aaa ”改成“ * ”,這樣它就把所有沒給出設(shè)置的以 domain.com 結(jié)尾的記錄全部轉(zhuǎn)到 www.domain.com 去了,不管是 aaa.domain.com 還是 bbb.domain.com 。這不會影響已有的記錄。
下一步就要配置 Web 服務(wù)器了。我們選兩個常用的: IIS 和 Apache for NT 。
一、 IIS (記住,只有 4.0 版以上才支持基于名稱的虛擬主機。)
進入 IIS 的服務(wù)管理器,在相應(yīng)的服務(wù)器上選擇新增 Web 站點,給站點起個名字,選擇好 IP 地址(也就是前面設(shè)好的由 DNS 服務(wù)器所指向的)。選擇好主目錄路徑,如果是映射到遠(yuǎn)端的 URL 的話,可以先設(shè)個臨時的路徑。
完成后進入新建的 Web 站點的屬性,在“ Web 站點”的標(biāo)簽里點“高級 ... ”按鈕,編輯標(biāo)識記錄,在“主機標(biāo)題名”處填寫要加入的虛擬域名,如: aaa.domain.com ,記住要填完整,不能光打 aaa ?,F(xiàn)在可以到“主目錄”的標(biāo)簽里選擇要映射的具體目錄了,可以是本機器或本網(wǎng)機器上的路徑,也可是遠(yuǎn)端站點的 URL 。
IIS 配置起來直觀,但如果是有大量的記錄就不適合了,而且也不適合在線申請。
二、 Apache (新版本已經(jīng)開始支持 NT ,你可以到 http://www.apache.org 去得到最新的版本,并且?guī)г创a,有興趣可以自己開發(fā)些新功能)
配置 Apache 需要跟配置文件 http.conf 打交道,缺省情況它位于 /Program Files/Apache Group/Apache/conf 目錄下。
首先需要加入 NameVirtualHost xxx.xxx.xxx.xxx
其中 xxx.xxx.xxx.xxx 為你虛擬服務(wù)器的 IP 地址,也就是上面例子 www.domain.com 的 IP 地址。在此可配置多個虛擬 IP 地址。(注意:這里要用 IP 地址,不要用域名)
接下來為每個虛擬域名加入記錄: …… xxx.xxx.xxx.xxx 要和 NameVirtualHost 的一致。 在兩個標(biāo)志之間可加入的配置參數(shù)有:
ServerName 后面跟你要增加的虛擬域名,如 aaa.domain.com ;
Documentroot 如果你映射到本機的路徑就加在后面,如“ F:/html/aaa ”(需要加雙引號);
redirect 如果你映射到遠(yuǎn)端的 URL 可加在后面,有兩個參數(shù),第一個是虛擬域名的相對路徑,第二個是遠(yuǎn)端站點的 URL ;
ServerAlias 后可加入本域名的別名,可使用通配符,如:
*.aaa.domain.com 。
下面舉幾個例子:
1. 映射到本機的物理路徑:
< VirtualHost xxx.xxx.xxx.xxx>
DocumentRoot "F:/Program Files/Apache Group/Apache/htdocs/test"
ServerName test.domain.com
< VirtualHost>
2. 映射到遠(yuǎn)端的 URL :
< VirtualHost xxx.xxx.xxx.xxx>
ServerName test1.doamin.com
redirect / http://test.domain1.com/welcome.htm
< /VirtualHost>
當(dāng)然還有許多參數(shù),象 log 文件的位置、超時的設(shè)置、緩沖區(qū)的設(shè)置等等,可以參考 Apache 的在線幫助文件。每增加一個虛擬域名就要增加一段位于 < VirtualHost...>...< /VirtualHost> 之間的配置代碼,而且只有在重新啟動 Apache 后新配置才能生效。
顯然如果要配置大量的記錄將大大增加配置文件的長度,這樣會還會使 Apache 啟動變慢,占用更多的內(nèi)存,而且也不容易實現(xiàn)在線申請。你可以通過選擇動態(tài)方式來配置虛擬主機。這樣你不必事先寫好配置,而是通過編寫一定的動態(tài)規(guī)則來自動生成或隨時從獨立的配置文件中讀取信息。這要用到 Apache 的 mod_rewrite 模塊,所以要在配置文件里加一行:
LoadModule rewrite_module modules/ApacheModuleRewrite.dll
你可以制定很多規(guī)則來重寫 URL ,象通過環(huán)境變量、 http 協(xié)議頭,甚至是通過外部的數(shù)據(jù)庫來維護 URL 。它的功能非常強大,也就同時帶來了復(fù)雜性,你得通過不斷的摸索和實驗來真正掌握它,不過這是很值得的。
最后簡單的介紹一下在線免費域名的一種實現(xiàn):
1. 通過 Perl 來維護一個用戶數(shù)據(jù)庫,管理用戶的增刪、驗證和密碼更改等工作。
2. 同時用 Perl 來通過數(shù)據(jù)庫維護獨立的虛擬域名的配置文件,例如: vdomains.map ,格式如下:
aaa.domain.com http://www.domain1.com/~aaa
bbb.domain.com http://www.domain2.com/~bbb ...
3. 最后配置 httpd.conf 文件。
用 RewriteEngine On 打開 rewrite 模塊,用 RewriteMap 設(shè)定配置文件的位置和屬性,用 RewriteCond 和 RewriteRule 制定相應(yīng)的規(guī)則即可。