Apache下伺服器虛擬機器主機的設定方法介紹

來源:互聯網
上載者:User

一、WWW伺服器虛擬機器主機原理

WWW伺服器虛擬機器主機是指使用一台物理機器,充當多個主機名稱的WWW伺服器。比如由一台機器同時提供http://www.company1.com, http://www.company2.com 等的WWW服務,而瀏覽這些WWW網站的使用者感覺不到這種方式下跟由不同的機器提供不同的服務有什麼差別。

使用WWW虛擬機器主機的好處在於,一些小規模的網站,通過跟其他網站共用同一台物理機器,可以減少系統的運行成本,並且可以減少管理的難度。另外,對於個人使用者,也可以使用這種虛擬機器主機方式來建立有自己獨立網域名稱的WWW伺服器,目前國內有很多公司都提供這種免費的服務。

WWW虛擬機器主機有兩種工作方式:

1.1 基於IP地址的虛擬機器主機方式

這種方式下,不同的主機名稱解析到不同的IP地址,提供虛擬機器主機服務的機器上同時設定有這些IP地址。伺服器根據使用者請求的目的IP地址來判定使用者請求的是哪個虛擬機器主機的服務,從而進一步的處理。

缺點:基於IP地址的虛擬機器主機方式需要在提供虛擬機器主機服務的機器上設立多個IP地址,既浪費了IP地址,又限制了一台機器所能容納的虛擬機器主機數目。因此這種方式越來越少使用。但是,這種方式是早期使用的HTTP 1.0協議唯一支援的虛擬機器主機方式。

1.2 基於主機名稱的虛擬機器主機方式

由於基於IP地址的虛擬機器主機方式有如上的缺點,HTTP 1.1協議中增加了對基於主機名稱的虛擬機器主機的支援。具體說,當客戶程式向WWW伺服器發出請求時,客戶想要訪問的主機名稱也通過要求標頭中的“Host:”語句傳遞給WWW伺服器。比如,www.company1.com, www.company2.com 都對應於同一個IP地址(即由同一台機器來給這兩個虛擬網域名稱提供服務),客戶程式要存取http://www.company1.com/index.html時,發出的要求標頭中包含有如下的內容:

GET /index.html HTTP/1.1

Host: www.company1.com

…..

WWW伺服器程式接收到這個請求後,可以通過檢查“Host:”語句,來判定客戶程式請求是哪個虛擬機器主機的服務,然後再進一步的處理。

優點:提供虛擬機器主機服務的機器上只要設定一個IP地址,理論上就可以給無數多個虛擬網域名稱提供服務,佔用資源少,管理方便。目前基本上都是使用這種方式來提供虛擬機器主機服務。

缺點:在早期的HTTP 1.0版本下不能使用。實際上現在使用的瀏覽器基本上都支援基於主機名稱的虛擬機器主機方式。

二、Apache伺服器下的虛擬機器主機設定技術

2.1 Apache WWW伺服器簡介

Apache WWW伺服器是目前Internet上使用最廣的WWW伺服器軟體。通過靈活的配置,它可以完成幾乎您想得到的功能。本文主要介紹在Apache 下設定各種虛擬機器主機的方法。

2.2 Apache WWW伺服器下基於IP地址的虛擬機器主機設定

使用這種虛擬機器主機方式,首先要在伺服器上為每個虛擬機器主機單獨設定一個IP地址。這些IP地址可以通過增加多個網卡或者在一個網卡上設立多個IP地址來完成。有了多個IP地址後,可以採用以下兩種方式之一來設定Apache:

2.2.1 為每個虛擬機器主機運行一份Apache

採用這種方式,每一份Apache程式可以以單獨的使用者運行,因此各個虛擬機器主機之間互不影響。設定這種虛擬機器主機時,只要為每一份Apache設定一套設定檔就可以了,唯一需要注意的是:必須使用“Listen”語句,強制每一份Apache 僅僅在屬於“自己”的IP地址上接收服務要求。

優點:各個虛擬機器主機之間互不干擾,安全性高。

缺點:佔用系統資源較多。

2.2.2多個虛擬機器主機共用同一份Apache

採用這種方式,各個虛擬機器主機共用同一份Apache,因此各個虛擬機器主機之間有一定的影響,尤其是執行CGI程式時,可能會帶來一些嚴重的安全問題。設定這種虛擬機器主機時,只要為每一個虛擬機器主機設定類似如下的資訊即可:

<VirtualHost www.company1.com>; DocumentRoot /home/company1 … </VirrualHost>;

優點:佔用系統資源比上一種方式少。

缺點:安全性低,每個虛擬機器主機仍然需要佔用一個IP地址。

2.3 Apache WWW伺服器下簡單的基於名字的虛擬機器主機設定

這種方式下,各個虛擬機器主機共用同一份Apache,因此有CGI程式運行時,安全性也不高。設定這種虛擬機器主機時,只要為每一個虛擬機器主機設定類似如下的資訊即可

NameVirtualHost 111.222.33.44 ; 在這個IP地址接收虛擬機器主機的服務 <VirtualHost 111.222.33.44>; ServerName www.company1.com DocumentRoot /www/company1 </VirtualHost>; <VirtualHost 111.222.33.44>; ServerName www.company2.com DocumentRoot /www/company2 </VirtualHost>;

優點:只要一個IP地址就可以提供大量的虛擬機器主機服務。

缺點:安全性差。維護這些虛擬機器主機時需要更改設定檔,並且需要重新啟動Apache進程才能起作用。因此不適合進行大規模的虛擬機器主機服務。

2.4 Apache WWW伺服器下基於名字的大規模虛擬機器主機設定

所謂大規模虛擬機器主機,是指能夠提供非常多的虛擬機器主機服務,比如能提供超過數十萬個網域名稱的虛擬機器主機服務。如果使用以上討論的方法,是很難完成的。實現這種服務的一種方式是利用Apache 功能強大的URL重寫功能。下面以一個執行個體來說明這種方式。

2.4.1 Apache中URL重寫功能

Apache 1.2及以後版本都有URL重寫(Rewrite)功能。簡單的說,URL重寫功能就是在Apache接收到請求後,在處理的過程中能根據預先設定的規則,對請求中的URL進行修改。這些規則主要由正規運算式組成。重寫依賴於輸入的URL、各種伺服器端環境變數、HTTP要求標頭中的內容、時間,甚至可以通過外部的程式來使用資料庫中的資訊來協助重寫。

URL重寫功能非常強大,通過URL重寫,可以使Apache完成異常複雜的功能。當然,URL重寫功能本身也比較複雜,關於URL重寫功能的詳細說明可以參看Apache 的隨機文檔。

2.4.2 使用Apache中URL重寫功能實現基於名字的大規模虛擬機器主機設定

假設機器www.home.com提供名字形如abcde.home.com、hijk.home.com等的大規模虛擬機器主機服務。其中虛擬機器主機名必須是字母或數字,並且長度至少為3。為了防止一個目錄下檔案或子目錄太多而對效能產生很大的負面影響,對使用者的目錄按照名字進行分級劃分,如虛擬機器主機abcde.home.com的相關檔案存放在目錄/member/ab/de/abcde下面。其中“ab”、“de”分別是“abcde”的前邊兩個字元和最後兩個字元。當使用者請求http://abcde.home.com時,系統應該返回/member/ab/de/abcde下面的檔案。

下面是為了完成這種功能需要進行的設定

1. 對網域名稱伺服器的設定

假設www.home.com的IP地址為202.103.190.57,在網域名稱伺服器DNS的home.com資料檔案中增加一行:

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

* IN A 202.103.190.57

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

這樣,所有 *.home.com的IP地址都會被解析為202.103.190.57,就沒有必要為各個虛擬機器主機分別進行設定。

2. 對Apache的設定

首先使用命令“httpd -l”檢查mod_rewrite模組是否已經編譯到Apache中,如果沒有,重新編譯Apache。

然後在Apache的設定檔httpd.conf中增加如下語句(其中以“#”開頭的為注釋):

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

#禁止使用機器的正式名

UseCanonicalName off

#使能重寫功能

RewriteEngine on

RewriteMap lowercase int:tolower

# 為安全考慮,對CGI程式不進行重寫

RewriteCond %{REQUEST_URI} !^/cgi-bin/

# 對www.home.com不重寫,其他的重寫

RewriteCond ${lowercase:%{HTTP_HOST}} !^www\.home\.com(\.*)$

RewriteCond ${lowercase:%{HTTP_HOST}} ^[a-z0-9-]+\.home\.com(\.*)$

# 首先把機器名改為小寫,添加到請求的檔案路徑前,並繼續處理

RewriteRule ^(.+) ${lowercase:%{HTTP_HOST}}$1 [C]

# 重寫請求

RewriteRule ^([a-z0-9])([a-z0-9])([a-z0-9])\.home\.com([\.]*)/(.*) /member/$1$2/$2$3/$1$2$3/$5

RewriteRule ^([a-z0-9])([a-z0-9])([a-z0-9]*)([a-z0-9])([a-z0-9])\.home\.com([\.]*)/(.*) /member/$1$2/$4$5/$1$2$3$4$5/$7

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

優點:只要一個IP地址就可以提供大量的虛擬機器主機服務,維護方便。

缺點:安全性低。上例為了增強安全性,禁止運行使用者自己的CGI程式。

2.5 Apache WWW伺服器下的重新導向虛擬機器主機設定

重新導向虛擬機器主機是指僅僅提供重新導向功能,而不實際存放使用者首頁資料的虛擬機器主機。比如,某網站有多個鏡像伺服器,假設為www1.user.com、www2.user.com,…wwwn.user.com。這些伺服器放在不同的網路上,分佈於各地的客戶訪問這些伺服器的速度也互不相同。而網站www.home.com通過虛擬網域名稱user.home.com為這些鏡像的伺服器提供虛擬機器主機服務。當客戶訪問http://user.home.com時,www.home.com根據使用者的IP地址、收集到的網路拓撲結構資訊,把客戶重新導向到對該客戶來說訪問速度最快的網站。

重新導向虛擬機器主機服務也可以通過使用URL重寫功能來完成。這裡僅給出簡單的重寫規則:

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

RewriteRule ^([a-z0-9]+)\.home\.com([\.]*)/(.*) /www/cgi-bin/nph-redirect.cgi/$1/$3 [T=application/x-httpd-cgi,L]

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

其中,nph-redirect.cgi為一個CGI程式,為了實現自動重新導向,它需要產生完整的HTTP 應答頭資訊。該程式通過環境變數PATH_INFO得到使用者請求的URL,通過環境變數REMOTE_ADDR得到使用者的IP地址,並根據網路拓撲情況產生重新導向資訊,返回給客戶。

參考文獻:

1.Apache 1.3 User's Guide http://www.apache.org

Virtual Hosting Setup Using Apache

Abstract:

There are two types of WWW Virtual Hosting, IP-based and Name-based. Those two types are introduced in this thesis, followed by some methods about WWW Virtual Hosting configuration under Apache and the difference between them is analyzed.



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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