實現虛擬網域名稱

來源:互聯網
上載者:User
 
實現虛擬網域名稱
 
     

完整實現虛擬網域名稱要三個條件:
1、DNS伺服器泛網域名稱解析設定; 2、WEB伺服器泛網域名稱綁定設定; 3、瀏覽器支援(3.0以上的都支援);這三個條件滿足了,然後在虛擬機器主機上用虛擬網域名稱CGI程式實現象 my.yeah.net 一樣的虛擬網域名稱。   

下面的文章分別介紹NT和UNIX的實現方法。 NT 下虛擬網域名稱的實現 --轉貼 - 飛雲飄渺 08-19-2000 19:58   

虛擬網域名稱實際上是虛擬機器主機的一種。 虛擬機器主機的出現是為了節省硬體的投資。如果 ISP 為每個申請了網域名稱的使用者都使用一台單獨的機器,顯然費用會很高,而且對於訪問不是很頻繁的網站來說也是一種浪費。所以就出現了大家公用一台機器,但每個使用者之間相互獨立,功能完全等同與擁有自己的主機。   

虛擬機器主機分為基於 IP 位址的( IP-based )和基於名稱的( name-based )兩種。基於 IP 位址的虛擬機器主機大家雖然在同一台機器上,還是要給每個網域名稱配置獨立的 IP 位址,這樣看來還不能算是一種很理想的方案。有沒有用一台機器、一個 IP 位址,又能實現獨立的網域名稱呢?   

這個想法隨著 http/1.1 協議的出現得到了實現。它的原理是用 Web 服務器和瀏覽器共同作用來實現把虛擬網域名稱與相應的目錄或網站對應。這樣使用者在瀏覽器裡輸入不同的名字,雖然由 DNS 伺服器解析出的是同一個 IP,但得到的卻是不同的內容。看上去就象兩個獨立的網域名稱了。所以這種基於名稱的虛擬機器主機又稱為非 IP 的( non-IP )。這同時還有一個用處,可以給很長的 URL 起一個即好記又有意義的別名。這就是虛擬網域名稱。   

實現虛擬網域名稱要有兩方面的支援:   

一是 Web 服務器: 現在有很多的 Web Server 支援基於名稱的虛擬機器主機。象 Netscape ,IIS 等都支援。當然用的最多的還是 Apache Web Server ,究其原因是因為它配置方便,還是免費的,而且它是第一個實現了基於名稱的虛擬機器主機的伺服器產品。   

二是使用者的瀏覽器: 我想大家使用的決大多數應該是 3.0 版本以上的 IE 或 Netscape ,那就沒問題了,它們都支援。 下面我們就來看看在 NT 下如何?虛擬網域名稱:   

第一步是要 DNS 伺服器認識你要增加的網域名稱,也就是把它解釋成相應的 IP 位址。因為我們要靠 Web 服務器來區分網域名稱,所以這個 IP 位址自然得是你 Web Server 所管理的了。   

你所要做的就是 DNS 服務中增加一個別名記錄,假定你要增加的是 aaa.domain.com ,想要指到 www.domain.com ,就可寫成: aaa IN CNAME www.domain.com .   

也許你會想如果我要增加很多網域名稱,那不是很麻煩,而且 DNS 伺服器的記錄檔案要很大嘍。好,我們來騙一下 DNS 伺服器,把“ aaa ”改成“ * ”,這樣它就把所有沒給出設定的以 domain.com 結尾的記錄全部轉到 www.domain.com 去了,不管是 aaa.domain.com 還是 bbb.domain.com 。這不會影響已有的記錄。   

下一步就要配置 Web 服務器了。我們選兩個常用的:IIS 和 Apache for NT 。   

一、 IIS (記住,只有 4.0 版以上才支援基於名稱的虛擬機器主機。)   

進入 IIS 的服務管理員,在相應的伺服器上選擇新增 Web 網站,給網站起個名字,選擇好 IP 位址(也就是前面設好的由 DNS 伺服器所指向的)。選擇好主目錄路徑,如果是映射到遠端的 URL 的話,可以先設個臨時的路徑。   

完成後進入建立的 Web 網站的屬性,在“ Web 網站”的標籤裡點“進階 ...”按鈕,編輯標識記錄,在“主機標題名”處填寫要加入的虛擬網域名稱,如:aaa.domain.com ,記住要填完整,不能光打 aaa 。現在可以到“主目錄”的標籤裡選擇要映射的具體目錄了,可以是本機器或本網機器上的路徑,也可是遠端網站的 URL 。   

IIS 配置起來直觀,但如果是有大量的記錄就不適合了,而且也不適合線上申請。   

二、 Apache (新版本已經開始支援 NT ,你可以到 http://www.apache.org 去得到最新的版本,並且帶原始碼,有興趣可以自己開發些新功能)   

配置 Apache 需要跟設定檔 http.conf 打交道,預設情況它位於 Apache/conf 目錄下。   

首先需要加入 NameVirtualHost xxx.xxx.xxx.xxx   其中 xxx.xxx.xxx.xxx 為你虛擬伺服器的 IP 位址,也就是上面例子 www.domain.com 的 IP 位址。在此可配置多個虛擬 IP 位址。(注意:這裡要用 IP 位址,不要用網域名稱)   

接下來為每個虛擬網域名稱加入記錄: ……   xxx.xxx.xxx.xxx 要和 NameVirtualHost 的一致。在兩個標誌之間可加入的配置參數有:    ServerName 後面跟你要增加的虛擬網域名稱,如 aaa.domain.com ;   

Documentroot 如果你映射到原生路徑就加在後面,如 "F:/html/aaa"(需要加雙引號);    redirect 如果你映射到遠端的 URL 可加在後面,有兩個參數,第一個是虛擬網域名稱的相對路徑,第二個是遠端網站的 URL ;    ServerAlias 後可加入本網域名稱的別名,可使用萬用字元,如:*.aaa.domain.com 。   

下面舉幾個例子:   1.映射到原生實體路徑: DocumentRoot "F:/Program Files/Apache Group/Apache/htdocs/test" ServerName test.domain.com   2.映射到遠端的 URL : ServerName test1.doamin.com redirect /http://test.domain1.com/welcome.htm 當然還有許多參數,象 log 檔案的位置、逾時的設定、緩衝區的設定等等,可以參考 Apache 的線上協助檔案。每增加一個虛擬網域名稱就要增加一段位於 ... 之間的配置代碼,而且只有在重新啟動 Apache 後新配置才會生效。   

顯然如果要配置大量的記錄將大大增加設定檔的長度,這樣會還會使 Apache 啟動變慢,佔用更多的記憶體,而且也不容易實現線上申請。你可以通過選擇動態方式來配置虛擬機器主機。這樣你不必事先寫好配置,而是通過編寫一定的動態規則來自動產生或隨時從獨立的設定檔中讀取資訊。這要用到 Apache 的 mod_rewrite 模組,所以要在設定檔裡加一行: LoadModule rewrite_module modules/ApacheModuleRewrite.dll   

你可以制定很多規則來重寫 URL ,象通過環境變數、http 協議頭,甚至是通過外部的資料庫來維護 URL。它的功能非常強大,也就同時帶來了複雜性,你得通過不斷的摸索和實驗來真正掌握它,不過這是很值得的。   

最後簡單的介紹一下線上免費網域名稱的一種實現:   1.通過 Perl 來維護一個使用者資料庫,系統管理使用者的增刪、驗證和密碼更改等工作。   2.同時用 Perl 來通過資料庫維護獨立的虛擬網域名稱的設定檔,例如: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 設定設定檔的位置和屬性,用 RewriteCond 和RewriteRule 制定相應的規則即可。

Linux 下虛擬網域名稱的實現 DNS 伺服器的設定   

我們知道互連網網是基於 TCP/IP 協議的,要進行通訊必須獲得對方的 IP 位址,這是通過 DNS 伺服器來實現的。因此要想實現虛擬網域名稱首先應當令 DNS 伺服器接受該虛擬網域名稱,即把它映射到指定的 IP 位址上。因為我們靠 Web 服務器來區分網域名稱,所以這個 IP 位址自然應當是 Web 服務器所管理的。   

RedHat6.0 作業系統中捆綁有 BIND DNS 伺服器。它的網域名稱設定檔是 "/etc/named.conf",一般情況下,網域設定檔案放在 "/var/named" 目錄下面。   named.conf 檔案的配置: zone "domain.com" { type master; file "domain.com"; }; zone "0.10.10.in-addr.arpa" { type master; file "10.10.0"; };   

該例子說明 "domain.com" 的網域設定檔案是 "/var/named/domain.com" ,反向域的設定檔是 "/var/named/10.10.0" 。domain.com 檔案負責把 DNS 網域名稱映射為 IP 位址。   domain.com 檔案配置: @ IN SOA dns.domain.com. hostmaster.dns.domain.com. ( 1998111003 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; default_ttl ) @ IN MX 10 dns.domain.com. @ IN NS dns.domain.com. @ IN A 10.10.0.1 www IN A 10.10.0.1   

假定要增加的網域名稱是 aaa.domain.com ,想要指到 www.domain.com , DNS 服務中應增加一個別名記錄,可寫成:aaa IN CNAME www.domain.com .   如果需要配置大量的虛擬網域名稱,domain.com 檔案要很大,而且也相當麻煩。我們可以使用符號 "*" ,即在 domain.com 檔案中加入: * IN CNAME www.domain.com .   

這樣它就把所有沒給出設定的以 domain.com 結尾的記錄全部轉到 www.domain.com 去了,不管是 aaa.domain.com 還是 bbb.domain.com 。這不會影響已有的記錄。 配置好 DNS 伺服器後應該重新啟動守護進程 named:[root@domain /root]# /etc/rc.d/init.d/named restart

-------------------------------------------------------------------------

Apache 伺服器的配置   Apache 伺服器是目前互連網上使用最多的 Web 服務器,它可以維護非常繁忙的網站。 RedHat 6.0 捆綁了 Apache Web Server 1.3 。它的設定檔位於 "/etc/httpd/conf" 目錄下,有 httpd.conf 、 srm.conf 、 access.conf ,下面討論一下與虛擬網域名稱有關的配置:   

1.靜態配置   修改設定檔 httpd.conf 的步驟:    (1) 首先設定 UseCanonicalName 為 off 。它指示用伺服器 Host:header 的內容代替 ServerName 的值來提供給環境變數 SERVER_NAME 。    (2) 然後加入: NameVirtualHost xxx.xxx.xxx.xxx    其中 xxx.xxx.xxx.xxx 為所要配置的虛擬伺服器的 IP 位址。在此可配置多個虛擬 IP 位址,當然要與 DNS 伺服器中的配置一致。(注意:這裡要用 IP 位址,不能用網域名稱。)    (3) 接下來為每個虛擬網域名稱加入一段記錄: .....   xxx.xxx.xxx.xxx 要和 NameVirtualHost 配置的 IP 位址一致。在兩個標誌之間可加入的配置參數有: ServerName 後面跟你要增加的虛擬網域名稱,如 aaa.domain.com ; Documentroot 如果你映射到原生路徑就加在後面,如 "/home/aaa" ; redirect 如果你映射到遠端的 URL 可加在後面,有兩個參數,第一個是虛擬網域名稱的相對路徑,第二個是遠端網站的 URL ; ServerAlias 後可加入本網域名稱的別名,可使用萬用字元,如:*.aaa.domain.com 。   

下面舉兩個例子:   例 3.映射到原生實體路徑: DocumentRoot "/home/test" ServerName test.domain.com   例 4.映射到遠端的 URL: ServerName test1.doamin.com redirect /http://test.domain1.com/welcome.htm   還有一些參數,象 log 檔案的位置、逾時的設定、緩衝區的設定等等,在此不一一介紹,可以參考 Apache 伺服器的線上協助檔案。配置好 httpd.conf 檔案後需要重新啟動 Apache 的後台守護進程 httpd , [root@domain /root]# /etc/rc.d/init.d/httpd restart   每增加一個虛擬網域名稱就要增加一段位於 ... 之間的配置代碼,而且只有在重新啟動 httpd 後新配置才會生效。   

2.動態配置   可以發現,如果要配置大量的虛擬網域名稱將大大增加設定檔的長度,這樣還會使 Apache 啟動變慢,佔用更多的記憶體,而且也不容易實現線上申請。可以通過選擇動態方式來配置。這樣不必事先寫好配置,而是通過編寫一定的動態規則來自動產生或隨時從獨立的設定檔中讀取資訊。   

Apache 有一個強大的擴充功能,即模組( Modules )的特性。模組可對伺服器的功能進行擴充,它在運行和使用時才裝入伺服器,這樣比一直放入伺服器中要節省記憶體空間,同時也比調用外部 CGI 程式速度快。   現在使用一個功能強大的模組來實現動態配置虛擬網域名稱,這就是 mod_rewrite 。它負責偵聽從客戶機送出的 URL 地址,並基於一組規則運算式對該 URL 來進行重寫。這類似於 URL 別名概念,但它更進了一步,輸出的 URL 可以映射到其他主機的任何 URL 地址上。

修改設定檔 httpd.conf 的步驟:    (1) 先設定 UseCanonicalName 為 off 。    (2) 使用 RewriteEngine on 開啟 rewrite 引擎。用 RewriteMap 設定設定檔的位置和屬性,用 RewriteCond 和 RewriteRule 制定相應的規則。   例 5.httpd.conf 檔案中相關配置的一個例子: RewriteEngine on RewriteMap lowercase int:tolower # 定義獨立的設定檔的位置 RewriteMap vhost dbm:/www/conf/vhostdbm # 利用獨立的設定檔重新對應虛擬網域名稱 RewriteCond ${vhost:%1} ^(/.*)$ RewriteRule ^/(.*)$ %1/docs/$1 RewriteCond %{REQUEST_URI} ^/cgi-bin/ RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ RewriteCond ${vhost:%1} ^(/.*)$ RewriteRule ^/(.*)$ %1/cgi-bin/$1   這裡的 vhostdbm 檔案格式見 "CGI 程式的編製 " 。

-------------------------------------------------------------------------------

CGI 程式的編製   要實現虛擬網域名稱的線上申請,就必須編寫相應 CGI 程式動態修改獨立的設定檔(即上面的 vhostdbm 檔案)和進行使用者的管理(包括使用者申請,登入,密碼修改等等)。在此只介紹對獨立的設定檔的操作,其他屬於如何用 Perl 語言來編寫 CGI 程式,請參考有關資料。   

vhostdbm 檔案使用 dbm 格式來記錄資料,與用普通文字檔相比可加快尋找速度,而且易於修改。許多 UNIX 系統都具有叫做 dbm ( database management )的標準庫。該庫將鍵 - 值對的集合存貯到一對磁碟檔案中,提供簡單的資料庫管理工具,可以方便的更改、新增或刪除資料內容。   

Perl 訪問 dbm 的方式:通過一個類似於開啟檔案的進程將關聯陣列與 dbm 資料庫聯絡起來。在數組中建立新元素時立即就更改了 dbm 資料庫。刪除一個元素的同時也刪除了 dbm 資料庫中的數值。可使用:   

1 、欲將 dbm 資料庫與 dbm 數組相關聯起來: dbmopen(%arrayname,"dbmfilename",$mode);   如果 dbmfilename 不存在的話就建立該庫。 %arrayname 參數是 Perl 的關聯陣列(如果這個數組已經有值,那麼這些值就被刪除)。該關聯陣列串連到叫做 dbmfilename 的 dbm 資料庫中。$mode 參數是當需要建立庫時控制庫檔案許可權的數字,該數字被指定為 8 進位,經常被用到的是 0644 ,給除了機主之外的新使用者以唯讀許可權,機主可有全部許可權。   

2 、關閉 dbm 庫: dbmclose(%arrayname); %arrayname 是已經與 dbm 庫關聯了的數組名。   例 6 .以 VHOST 開啟 vhostdbm ,或建立一個 dbm 庫: dbmopen(%VHOST,"vhostdbm",0644);   例 7 .建立記錄或更改已有記錄(設從 html 檔案 form 中傳過來的參數名為 vhost 、rhost): $VHOST{$FORM{'vhost'}}=$FORM{'rhost'};   例 8 .刪除已有記錄(設從 html 檔案 form 中傳過來的參數名為 vhost ): delete $VHOST{$FORM{'vhost'}};   例 9 .關閉 vhostdbm : dbmclose(%VHOST); 註:以上已經假設傳過來的參數經過了驗證,不存在重複的記錄,否則會導致已有記錄的混亂。

泛網域名稱解析-nt

泛網域名稱解析是指建立一個域以後,比如,建立了 abc.com 域,如何配置使任意的 xxx.abc.com 都可以解析到一個地址,有文章說,在 service pack4 就已經解決了這個問題(因為在Unix上實現起來非常容易的),實際上並沒有解決。當微軟的 sp6a 出台之後,這個問題解決了,配置也是相當容易。相關: http://download.microsoft.com/download/winntsp/Install/6.0a/NT4/CN/SP6I386.EXE   

如果在NT4.0上打了這個補丁,問題很好辦了。開啟dns管理器,建立 abc.com 域,在該域中建立 A 記錄(主機記錄),主機名稱字填上一個 * ,並且加上相應的地址 a.b.c.d ,這樣,任意的 xxx.abc.com 都會解析到地址 a.b.c.d 。當然,對於特定的主機記錄,解析也不會有任何問題。   

可以測試:xxx.chinaasp.org,負責解析的主dns伺服器:ns.chinasp.com(202.101.18.171) scud

在當前域建立一個名字為 * 的子域,在子域裡面建立一個主機名稱為空白的主機。

unix/linux 下泛網域名稱設定舉例

1.dns: ........... @ IN A 202.11.11.11 * IN A 202.11.11.11 ........... 2.apache: ................. ServerAlias yourname.net www.yourname.net ServerAlias www.yourname.net *.yourname.net ServerName www.yourname.net ................. ip、網域名稱改成自己的就可以了

2.apache: ................. ServerName www.yourname.net ServerAlias yourname.net www.yourname.net *.yourname.net .................

以上文章轉自: http://www.coolwww.net

虛擬網域名稱CGI程式: http://www.coolwww.net/cgi/free.htm

這裡有另外一個CGI程式的實現方法: http://cgi.chinalb.com / http://cgi.chinalb.com/write/1-4.htm

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.