Apache的配置
Apache 下的虛擬主機(jī)設(shè)置摘要:本文介紹了WWW 服務(wù)器的虛擬主機(jī)的工作原理,討論了在Apache WWW服務(wù)器下的各種虛擬主機(jī)、尤其是大規(guī)模虛擬主機(jī)的設(shè)置技術(shù),并比較了各種方式的特點(diǎn)。關(guān)鍵詞:A
Apache 下的虛擬主機(jī)設(shè)置
摘要:本文介紹了WWW 服務(wù)器的虛擬主機(jī)的工作原理,討論了在Apache WWW服務(wù)器下的各種虛擬主機(jī)、尤其是大規(guī)模虛擬主機(jī)的設(shè)置技術(shù),并比較了各種方式的特點(diǎn)。
關(guān)鍵詞:Apache WWW Virtual Hosting 虛擬主機(jī)
一、WWW 服務(wù)器虛擬主機(jī)原理
WWW 服務(wù)器虛擬主機(jī)是指使用一臺(tái)物理機(jī)器,充當(dāng)多個(gè)主機(jī)名的WWW 服務(wù)器。比如由一臺(tái)機(jī)器同時(shí)提供http://www.company1.com, http://www.company2.com 等的WWW 服務(wù),而瀏覽這些WWW 站點(diǎn)的用戶感覺不到這種方式下跟由不同的機(jī)器提供不同的服務(wù)有什么差別。
使用WWW 虛擬主機(jī)的好處在于,一些小規(guī)模的網(wǎng)站,通過跟其他網(wǎng)站共享同一臺(tái)物理機(jī)器,可以減少系統(tǒng)的運(yùn)行成本,并且可以減少管理的難度。另外,對(duì)于個(gè)人用戶,也可以使用這種虛擬主機(jī)方式來建立有自己獨(dú)立域名的WWW 服務(wù)器,目前國內(nèi)有很多公司都提供這種免費(fèi)的服務(wù)。
WWW 虛擬主機(jī)有兩種工作方式:
1.1 基于IP 地址的虛擬主機(jī)方式
這種方式下,不同的主機(jī)名解析到不同的IP 地址,提供虛擬主機(jī)服務(wù)的機(jī)器上同時(shí)設(shè)置有這些IP 地址。服務(wù)器根據(jù)用戶請(qǐng)求的目的IP 地址來判定用戶請(qǐng)求的是哪個(gè)虛擬主機(jī)的服務(wù),從而進(jìn)一步的處理。
缺點(diǎn):基于IP 地址的虛擬主機(jī)方式需要在提供? 檳庵骰 竦幕 魃仙枇⒍喔鯥P 地址,既浪費(fèi)了IP 地址,又限制了一臺(tái)機(jī)器所能容納的虛擬主機(jī)數(shù)目。因此這種方式越來越少使用。但是,這種方式是早期使用的HTTP 1.0協(xié)議唯一支持的虛擬主機(jī)方式。
1.2 基于主機(jī)名的虛擬主機(jī)方式
由于基于IP 地址的虛擬主機(jī)方式有如上的缺點(diǎn),HTTP 1.1協(xié)議中增加了對(duì)基于主機(jī)名的虛擬主機(jī)的支持。具體說,當(dāng)客戶程序向WWW 服務(wù)器發(fā)出請(qǐng)求時(shí),客戶想要訪問的主機(jī)名也通過請(qǐng)求頭中的“Host:”語句傳遞給WWW 服務(wù)器。比如,www.company1.com , www.company2.com 都對(duì)應(yīng)于同一個(gè)IP 地址(即由同一臺(tái)機(jī)器來給這兩個(gè)虛擬域名提供服務(wù)),客戶程序要存取http://www.company1.com/index.html時(shí),發(fā)出的請(qǐng)求頭中包含有如下的內(nèi)容:
,GET /index.html HTTP/1.1
Host: www.company1.com
…..
WWW 服務(wù)器程序接收到這個(gè)請(qǐng)求后,可以通過檢查“Host:”語句,來判定客戶程序請(qǐng)求是哪個(gè)虛擬主機(jī)的服務(wù),然后再進(jìn)一步的處理。
優(yōu)點(diǎn):提供虛擬主機(jī)服務(wù)的機(jī)器上只要設(shè)置一個(gè)IP 地址,理論上就可以給無數(shù)多個(gè)虛擬域名提供服務(wù),占用資源少,管理方便。目前基本上都是使用這種方式來提供虛擬主機(jī)服務(wù)。
缺點(diǎn):在早期的HTTP 1.0版本下不能使用。實(shí)際上現(xiàn)在使用的瀏覽器基本上都支持基于主機(jī)名的虛擬主機(jī)方式。
二、Apache 服務(wù)器下的虛擬主機(jī)設(shè)置技術(shù)
2.1 Apache WWW服務(wù)器簡介
Apache WWW 服務(wù)器是目前Internet 上使用最廣的WWW 服務(wù)器軟件。通過靈活的配置,它可以完成幾乎您想得到的功能。本文主要介紹在Apache 下設(shè)置各種虛擬主機(jī)的方法。
2.2 Apache WWW服務(wù)器下基于IP 地址的虛擬主機(jī)設(shè)置
使用這種虛擬主機(jī)方式,首先要在服務(wù)器上為每個(gè)虛擬主機(jī)單獨(dú)設(shè)置一個(gè)IP 地址。這些IP 地址可以通過增加多個(gè)網(wǎng)卡或者在一個(gè)網(wǎng)卡上設(shè)立多個(gè)IP 地址來完成。有了多個(gè)IP 地址后,可以采用以下兩種方式之一來設(shè)置Apache :
2.2.1 為每個(gè)虛擬主機(jī)運(yùn)行一份Apache
采用這種方式,每一份Apache 程序可以以單獨(dú)的用戶運(yùn)行,因此各個(gè)虛擬主機(jī)之間互不影響。設(shè)置這種虛擬主機(jī)時(shí),只要為每一份Apache 設(shè)置一套配置文件就可以了,唯一需要注意的是:必須使用“Listen”語句,強(qiáng)制每一份Apache 僅僅在屬于“自己”的IP 地址上接收服務(wù)請(qǐng)求。
優(yōu)點(diǎn):各個(gè)虛擬主機(jī)之間互不干擾,安全性高。
缺點(diǎn):占用系統(tǒng)資源較多。
2.2.2多個(gè)虛擬主機(jī)共享同一份Apache
采用這種方式,各個(gè)虛擬主機(jī)共享同一份Apache ,因此各個(gè)虛擬主機(jī)之間有一定的影響,尤其是執(zhí)行CGI 程序時(shí),可能會(huì)帶來一些嚴(yán)重的安全問題。設(shè)置這種虛擬主機(jī)時(shí),只要為每一個(gè)虛擬主機(jī)設(shè)置類似如下的信息即可
,DocumentRoot /home/company1
…
優(yōu)點(diǎn):占用系統(tǒng)資源比上一種方式少。
缺點(diǎn):安全性低,每個(gè)虛擬主機(jī)仍然需要占用一個(gè)IP 地址。
2.3 Apache WWW服務(wù)器下簡單的基于名字的虛擬主機(jī)設(shè)置
這種方式下,各個(gè)虛擬主機(jī)共享同一份Apache ,因此有CGI 程序運(yùn)行時(shí),安全性也不高。設(shè)置這種虛擬主機(jī)時(shí),只要為每一個(gè)虛擬主機(jī)設(shè)置類似如下的信息即可
NameVirtualHost 111.222.33.44 ; 在這個(gè)IP 地址接收虛擬主機(jī)的服務(wù)
ServerName www.company1.com
DocumentRoot /www/company1
ServerName www.company2.com
DocumentRoot /www/company2
優(yōu)點(diǎn):只要一個(gè)IP 地址就可以提供大量的虛擬主機(jī)服務(wù)。
缺點(diǎn):安全性差。維護(hù)這些虛擬主機(jī)時(shí)需要更改配置文件,并且需要重新啟動(dòng)Apache 進(jìn)程才能起作用。因此不適合進(jìn)行大規(guī)模的虛擬主機(jī)服務(wù)。
2.4 Apache WWW服務(wù)器下基于名字的大規(guī)模虛擬主機(jī)設(shè)置
所謂大規(guī)模虛擬主機(jī),是指能夠提供非常多的虛擬主機(jī)服務(wù),比如能提供超過數(shù)十萬個(gè)域名
,的虛擬主機(jī)服務(wù)。如果使用以上討論的方法,是很難完成的。實(shí)現(xiàn)這種服務(wù)的一種方式是利用Apache 功能強(qiáng)大的URL 重寫功能。下面以一個(gè)實(shí)例來說明這種方式。
2.4.1 Apache中URL 重寫功能
Apache 1.2及以后版本都有URL 重寫(Rewrite )功能。簡單的說,URL 重寫功能就是在Apache 接收到請(qǐng)求后,在處理的過程中能根據(jù)預(yù)先設(shè)定的規(guī)則,對(duì)請(qǐng)求中的URL 進(jìn)行修改。這些規(guī)則主要由正規(guī)表達(dá)式組成。重寫依賴于輸入的URL 、各種服務(wù)器端環(huán)境變量、HTTP 請(qǐng)求頭中的內(nèi)容、時(shí)間,甚至可以通過外部的? 絳蚶詞褂檬 菘庵械男畔⒗窗鎦 匭礎(chǔ)?
URL 重寫功能非常強(qiáng)大,通過URL 重寫,可以使Apache 完成異常復(fù)雜的功能。當(dāng)然,URL 重寫功能本身也比較復(fù)雜,關(guān)于URL 重寫功能的詳細(xì)說明可以參看Apache 的隨機(jī)文檔。
2.4.2 使用Apache 中URL 重寫功能實(shí)現(xiàn)基于名字的大規(guī)模虛擬主機(jī)設(shè)置
假設(shè)機(jī)器www.home.com 提供名字形如abcde.home.com 、hijk.home.com 等的大規(guī)模虛擬主機(jī)服務(wù)。其中虛擬主機(jī)名必須是字母或數(shù)字,并且長度至少為3。為了防止一個(gè)目錄下文件或子目錄太多而對(duì)性能產(chǎn)生很大的負(fù)面影響,對(duì)用戶的目錄按照名字進(jìn)行分級(jí)劃分,如虛擬主機(jī)abcde.home.com 的相關(guān)文件存放在目錄/member/ab/de/abcde下面。其中“ab”、“de”分別是“abcde”的前邊兩個(gè)字符和最后兩個(gè)字符。當(dāng)用戶請(qǐng)求http://abcde.home.com時(shí),系統(tǒng)應(yīng)該返回/member/ab/de/abcde下面的文件。下面是為了完成這種功能需要進(jìn)行的設(shè)置:
1. 對(duì)域名服務(wù)器的設(shè)置
假設(shè)www.home.com 的IP 地址為202.103.190.57,在域名服務(wù)器DNS 的home.com 數(shù)據(jù)文件中增加一行:
--------------------------------------------------------------------------------
* IN A 202.103.190.57
--------------------------------------------------------------------------------
這樣,所有 *.home.com的IP 地址都會(huì)被解析為202.103.190.57,就沒有必要為各個(gè)虛擬主機(jī)分別進(jìn)行設(shè)置。
2. 對(duì)Apache 的設(shè)置
首先使用命令“httpd -l”檢查mod_rewrite模塊是否已經(jīng)編譯到Apache 中,如果沒有,重新編譯Apache 。
然后在Apache 的配置文件httpd.conf 中增加如下語句(其中以“#”開頭的為注釋):
--------------------------------------------------------------------------------
,#禁止使用機(jī)器的正式名
UseCanonicalName off
#使能重寫功能
RewriteEngine on
RewriteMap lowercase int:tolower
# 為安全考慮,對(duì)CGI 程序不進(jìn)行重寫
RewriteCond {REQUEST_URI} !^/cgi-bin/
# 對(duì)www.home.com 不重寫,其他的重寫
RewriteCond ${lowercase:{HTTP_HOST}} !^www.home.com(.*)$
RewriteCond ${lowercase:{HTTP_HOST}} ^[a-z0-9-] .home.com(.*)$
# 首先把機(jī)器名改為小寫,添加到請(qǐng)求的文件路徑前,并繼續(xù)處理
RewriteRule ^(. ) ${lowercase:{HTTP_HOST}}$1 [C]
# 重寫請(qǐng)求
RewriteRule ^([a-z0-9])([a-z0-9])([a-z0-9]).home.com([.]*)/(.*) /member/$1$2/$2$3/$1$2$3/$5
---------------------------------------------------------------------------------
優(yōu)點(diǎn):只要一個(gè)IP 地址就可以提供大量的虛擬主機(jī)服務(wù),維護(hù)方便。
缺點(diǎn):安全性低。上例為了增強(qiáng)安全性,禁止運(yùn)行用戶自己的CGI 程序。
2.5 Apache WWW服務(wù)器下的重定向虛擬主機(jī)設(shè)置
重定向虛擬主機(jī)是指僅僅提供重定向功能,而不實(shí)際存放用戶主頁數(shù)據(jù)的虛擬主機(jī)。比如,某站點(diǎn)有多個(gè)鏡像服務(wù)器,假設(shè)為www1.user.com 、www2.user.com ,…wwwn.user.com。這些服務(wù)器放在不同的網(wǎng)絡(luò)上,分布于各地的客戶訪問這些服務(wù)器的速度也互不相同。而站點(diǎn)www.home.com 通過虛擬域名user.home.com 為這些鏡像的服務(wù)器提供虛擬主機(jī)服務(wù)。當(dāng)客戶訪 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
,問http://user.home.com時(shí),www.home.com 根據(jù)用戶的IP 地址、收集到的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)信息,把客戶重定向到對(duì)該客戶來說訪問速度最快的站點(diǎn)。
重定向虛擬主機(jī)服務(wù)也可以通過使用URL 重寫功能來完成。這里僅給出簡單的重寫規(guī)則:
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
其中,nph-redirect.cgi 為一個(gè)CGI 程序,為了實(shí)現(xiàn)自動(dòng)重定向,它需要產(chǎn)生完整的HTTP 應(yīng)答頭信息。該程序通過環(huán)境變量PATH_INFO得到用戶請(qǐng)求的URL ,通過環(huán)境變量REMOTE_ADDR得到用戶的IP 地址,并根據(jù)網(wǎng)絡(luò)拓?fù)淝闆r生成重定向信息,返回給客戶。
參考文獻(xiàn):
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 RewriteRule ^([a-z0-9] ).home.com([.]*)/(.*) /www/cgi-bin/nph-redirect.cgi/$1/$3 [T=application/x-httpd-cgi,L]