代理服務(wù)器是位于客戶和客戶要訪問的服務(wù)器之間的系統(tǒng)。當(dāng)客戶機(jī)使用URL請(qǐng)求訪問遠(yuǎn)程資源時(shí),代理服務(wù)器接受該請(qǐng)求并取得該資源以滿足客戶機(jī)的請(qǐng)求。在通常情況下,代理服務(wù)器是客戶機(jī)的服務(wù)器,同時(shí)也是遠(yuǎn)程服務(wù)器的客戶。
代理服務(wù)器可以在自己的緩沖區(qū)中存儲(chǔ)被請(qǐng)求的內(nèi)容,當(dāng)這些信息再次被請(qǐng)求的時(shí)候,代理服務(wù)器就無需再從遠(yuǎn)程服務(wù)器上取了,這樣代理服務(wù)器就減輕了網(wǎng)絡(luò)的瓶頸問題。大家知道,Apache不僅可作為Web服務(wù)器,它還包含了代理服務(wù)器(Proxy Server)的功能。因此Apache可以配置成代理服務(wù)器,我們根據(jù)實(shí)際需要,可以配置成為正向和逆(反)向代理。
正向代理是一個(gè)能使我們的瀏覽器連接一個(gè)平時(shí)無法訪問的遠(yuǎn)端網(wǎng)絡(luò)的媒介。一個(gè)正向代理也能用于緩沖數(shù)據(jù),以降低正向代理和遠(yuǎn)端web服務(wù)器之間的負(fù)載。逆(反)向代理是一個(gè)web服務(wù)器系統(tǒng)。除了為客戶端提供位于本地磁盤上的頁面或是由CGI動(dòng)態(tài)生成的頁面之外,它還能為客戶端提供位于其它web服務(wù)器上的web頁面,從而使這些頁面看起來像是存在于這個(gè)代理服務(wù)器上一樣。
代理服務(wù)器是位于客戶和客戶要訪問的服務(wù)器之間的系統(tǒng)。當(dāng)客戶機(jī)使用URL請(qǐng)求訪問遠(yuǎn)程資源時(shí),代理服務(wù)器接受該請(qǐng)求并取得該資源以滿足客戶機(jī)的請(qǐng)求。在通常情況下,代理服務(wù)器是客戶機(jī)的服務(wù)器,同時(shí)也是遠(yuǎn)程服務(wù)器的客戶。
代理服務(wù)器可以在自己的緩沖區(qū)中存儲(chǔ)被請(qǐng)求的內(nèi)容,當(dāng)這些信息再次被請(qǐng)求的時(shí)候,代理服務(wù)器就無需再從遠(yuǎn)程服務(wù)器上取了,這樣代理服務(wù)器就減輕了網(wǎng)絡(luò)的瓶頸問題。大家知道,Apache不僅可作為Web服務(wù)器,它還包含了代理服務(wù)器(Proxy Server)的功能。因此Apache可以配置成代理服務(wù)器,我們根據(jù)實(shí)際需要,可以配置成為正向和逆(反)向代理。
正向代理是一個(gè)能使我們的瀏覽器連接一個(gè)平時(shí)無法訪問的遠(yuǎn)端網(wǎng)絡(luò)的媒介。一個(gè)正向代理也能用于緩沖數(shù)據(jù),以降低正向代理和遠(yuǎn)端web服務(wù)器之間的負(fù)載。逆(反)向代理是一個(gè)web服務(wù)器系統(tǒng)。除了為客戶端提供位于本地磁盤上的頁面或是由CGI動(dòng)態(tài)生成的頁面之外,它還能為客戶端提供位于其它web服務(wù)器上的web頁面,從而使這些頁面看起來像是存在于這個(gè)代理服務(wù)器上一樣。
在客戶端的網(wǎng)頁瀏覽器中要指定代理服務(wù)器的地址,這樣才能使用到代理服務(wù)的功能。在這里我們以微軟的IE 6.0為例來說明如何設(shè)置。打開IE網(wǎng)頁瀏覽器,然后執(zhí)行“工具”|“Internet選項(xiàng)”命令,在Internet選項(xiàng)對(duì)話框打開連接選項(xiàng)卡,如下圖1、圖2所示:screen.width*0.5) {this.resized=true; this.width=screen.width*0.5;}" border=0>
圖1 連接選項(xiàng)卡
在圖1中單擊“局域網(wǎng)設(shè)置(L)”按鈕,設(shè)置代理服務(wù)器,進(jìn)入下圖2。
screen.width*0.5) {this.resized=true; this.width=screen.width*0.5;}" border=0>
圖2設(shè)置代理服務(wù)器
在圖2中“自動(dòng)設(shè)置”選項(xiàng)中選中“自動(dòng)檢測設(shè)置(A)”,在“代理服務(wù)器” 選項(xiàng)中選中“使用代理服務(wù)器”,設(shè)置好代理服務(wù)器的網(wǎng)址(這里為IP地址:192.168.1.1)和端口號(hào)(如80),最后單擊“確認(rèn)”按鈕,這樣就完成了客戶端瀏覽器上設(shè)置代理服務(wù)器。
接下來,我們可以試著連到幾個(gè)網(wǎng)站,然后檢查一下Apache服務(wù)器所設(shè)置的CacheRoot(/var/cache/httpd)目錄,就可以看到已經(jīng)創(chuàng)建了Cache的目錄,這表示該臺(tái)Apache服務(wù)器開始提供代理服務(wù)器的功能了。
前向代理服務(wù)器通常位于用戶主機(jī)和要訪問的遠(yuǎn)程網(wǎng)絡(luò)之間。它從遠(yuǎn)程服務(wù)器取得所要求的資源,然后返回給用戶,同時(shí)存在磁盤上,以供下次使用。在這種情況下,客戶端的主機(jī)知道它們正在使用代理服務(wù)器,因?yàn)槊總€(gè)主機(jī)都必須配置為使用代理服務(wù)器。
例如,必須告訴WWW瀏覽器使用代理服務(wù)器,它才能使用代理服務(wù)器。所有的遠(yuǎn)程請(qǐng)求都通過代理服務(wù)器傳輸。這類代理服務(wù)器也稱為緩沖代理服務(wù)器。逆(反)向服務(wù)器也可以緩沖數(shù)據(jù),但它的作用則與前向服務(wù)器相反。
前向代理服務(wù)器的結(jié)構(gòu)如下圖3所示:
screen.width*0.5) {this.resized=true; this.width=screen.width*0.5;}" border=0>
圖3 前向代理服務(wù)器
Apache模塊 mod_proxy實(shí)現(xiàn)了Apache的代理/網(wǎng)關(guān)。它實(shí)現(xiàn)了以下規(guī)范的代理FTP, CONNECT(用于SSL), HTTP/0.9, HTTP/1.0,和 HTTP/1.1。此模塊經(jīng)配置后可用上述或其它協(xié)議連接其它代理模塊。
此模塊在Apache 1.1.x中處于試驗(yàn)階段,而在Apache v1.2.x和Apache v1.3.x中進(jìn)行了改良并去除了一些bug。然后在Apache v2.0中進(jìn)行了大的修整。現(xiàn)在協(xié)議的支持已經(jīng)升級(jí)到HTTP/1.1,并支持了過濾器。
Apache的mod_proxy在使用ProxyRemote指令時(shí),可以看作是一個(gè)正向代理。ProxyRemote 指令定義了此代理的遠(yuǎn)端代理。match可以是遠(yuǎn)端服務(wù)器支持的URL形式的名稱,或是遠(yuǎn)端服務(wù)器使用的部分URL,或是'*'以代表服務(wù)器可以接受所有的請(qǐng)求。remote-server是遠(yuǎn)端服務(wù)器的部分URL。語法為:
remote-server = protocol://hostname[:port]
protocol是與遠(yuǎn)端服務(wù)器交換信息時(shí)使用的協(xié)議;本模塊暫時(shí)只支持"http"。舉例如下:
ProxyRemote http://ghq.com/ http://mirrorghq.com:8888
ProxyRemote * http://study.com
逆(反)向代理服務(wù)器位于互聯(lián)網(wǎng)資源前面,逆向服務(wù)器從原始服務(wù)器找到被請(qǐng)求的資源,并反它返回給用戶主機(jī)。
與前向代理服務(wù)器不同的是,逆(反)向代理服務(wù)器的用戶并不知道它們連接的是代理服務(wù)器而不是資源服務(wù)器本身。其結(jié)構(gòu)如下圖4所示:screen.width*0.5) {this.resized=true; this.width=screen.width*0.5;}" border=0>
圖4 反向代理
當(dāng)使用了mod_cache配置一個(gè)逆(反)向代理后,它可以作為一個(gè)比較慢的web服務(wù)器的緩沖來使用。反向代理也可以啟用高級(jí)URL策略和管理技術(shù),從而使處于不同web服務(wù)器系統(tǒng)或是體系的web頁面同時(shí)存在于同一個(gè)URL空間下。逆(反)向代理對(duì)于實(shí)現(xiàn)具有很多或不同的web站點(diǎn)后端的集中管理非常理想。復(fù)雜的多層服務(wù)器系統(tǒng)可以使用一個(gè)Apache的mod_proxy前端和任意數(shù)量的后端web服務(wù)器來進(jìn)行架構(gòu)。
逆(反)向代理使用ProxyPass和ProxyPassReverse指令進(jìn)行配置??梢允褂胢od_cache和正向代理結(jié)合啟用緩沖功能。
ProxyPass 指令將一個(gè)遠(yuǎn)端服務(wù)器映射到本地服務(wù)器的URL空間中,對(duì)于我們不想對(duì)某個(gè)子目錄進(jìn)行反向代理時(shí)很有用。例如:
ProxyPass /mirror/ghq/i !
ProxyPass /mirror/ghq http://ghq.com
將會(huì)代理除對(duì)/mirror/ghq/i請(qǐng)求之外的所有對(duì) ghq.com 的/mirror/ghq請(qǐng)求。
ProxyPassReverse 指令調(diào)整由反向代理服務(wù)器發(fā)送的HTTP回應(yīng)頭中的URL。此指令使 Apache 調(diào)整HTTP重定向回應(yīng)中Location,Content-Location和URI頭里的URL。這就是Apache在作為逆(反)向代理使用時(shí),避免以因?yàn)槲挥诜聪虼碇蟮暮蠖朔?wù)器的HTTP重定向造成的繞過反向代理的實(shí)質(zhì)。
路徑是本地虛擬路徑的名稱,url遠(yuǎn)端服務(wù)器的部分URL,與ProxyPass指令中的使用方法相同。例如:
假定本地服務(wù)器Web地址為http://study.com/,那么下面兩句實(shí)現(xiàn)逆(反)代理功能:
ProxyPass /mirror/ghq/ http://ghq.com/
ProxyPassReverse /mirror/ghq/ http://ghq.com/
簡要說明:我們不僅會(huì)把所有對(duì)<http://study.com/mirror/ghq/bar>的請(qǐng)求直接轉(zhuǎn)為對(duì) <http://ghq.com/bar> 的代理請(qǐng)求(由ProxyPass提供的功能)。它還會(huì)改變服務(wù)器ghq.com的發(fā)送:當(dāng)http://ghq.com/bar被它重定向到http://ghq.com/quux時(shí),Apache會(huì)在前轉(zhuǎn)HTTP重定向回應(yīng)到客戶端之前調(diào)整它為http://study.com/mirror/ghq/quux。
目前新版本的Apache v 1.3.x的mod_proxy的緩沖功能已經(jīng)從mod_proxy中移除并入了一個(gè)新模塊--mod_cache。Apache 2.0.x的Proxy不再支持緩沖了,所有的緩沖功能已經(jīng)移入了mod_cache;mod_cache現(xiàn)在已經(jīng)能支持任何內(nèi)容的緩沖了,而不僅是通過代理的內(nèi)容。