通常我們?cè)贗nternet上使用的代理服務(wù)方式是正向代理方式,只用于代理內(nèi)部網(wǎng)絡(luò)對(duì)Internet的連接請(qǐng)求,客戶機(jī)必須指定代理服務(wù)器,并將本來(lái)要直接發(fā)送到Web服務(wù)器上的http請(qǐng)求發(fā)送到代理服務(wù)器中。
在這種情況下,由于外部網(wǎng)絡(luò)上的主機(jī)并不會(huì)配置并使用這個(gè)代理服務(wù)器,普通代理服務(wù)器也被設(shè)計(jì)為在Internet上搜尋多個(gè)不確定的服務(wù)器,而不是針對(duì)Internet上多個(gè)客戶機(jī)的請(qǐng)求訪問(wèn)內(nèi)部的某一個(gè)固定的服務(wù)器,因此一般情況下,對(duì)Web Server的代理服務(wù)都不支持外部對(duì)內(nèi)部網(wǎng)絡(luò)的訪問(wèn)請(qǐng)求。
當(dāng)一個(gè)代理服務(wù)器能夠代理外部網(wǎng)絡(luò)上的主機(jī),訪問(wèn)內(nèi)部網(wǎng)絡(luò)時(shí),這種代理服務(wù)的方式稱為反向代理服務(wù)方式。
此時(shí)的代理服務(wù)對(duì)外就表現(xiàn)為一個(gè)Web服務(wù)器,外部網(wǎng)絡(luò)就可以簡(jiǎn)單把它當(dāng)作一個(gè)標(biāo)準(zhǔn)的Web服務(wù)器而不需要特定的配置。
不同之處在于,這個(gè)服務(wù)器沒(méi)有保存任何網(wǎng)頁(yè)的真實(shí)數(shù)據(jù),所有的靜態(tài)網(wǎng)頁(yè)或者CGI程序,都保存在內(nèi)部的Web服務(wù)器上。
一般園區(qū)網(wǎng)或校園網(wǎng)有多臺(tái)在內(nèi)網(wǎng)上提供公共服務(wù)的Web服務(wù)器,一臺(tái)配置了公網(wǎng)IP地址的Apache服務(wù)器,這些服務(wù)器統(tǒng)一采用了VMware vSphere 5下虛擬出的多個(gè)Redhat Linux系統(tǒng)的虛擬機(jī),配置了Apache HTTP Server、PHP編譯環(huán)境和Oracle10g。
其中,在安裝公網(wǎng)IP地址的Apache服務(wù)器時(shí),對(duì)Apache HTTP Server的源代碼經(jīng)行了編譯和和重新配置,當(dāng)反向代理方式調(diào)試成功后,就可以允許外部的互聯(lián)網(wǎng)使用者通過(guò)透過(guò)邊界路由訪問(wèn)內(nèi)部園區(qū)網(wǎng)上的這些Web服務(wù)器。
筆者單位所使用的搭建反向代理的這臺(tái)Apache HTTP Server的配置環(huán)境是Redhat Linux8.0、Apache 1.3.24,單位的域名假設(shè)是AAA.com。比如,單位劃分內(nèi)網(wǎng)與外網(wǎng)的邊界路由上有e0與e1兩個(gè)模塊。
其中e0端口為對(duì)外端口,指向反向代理服務(wù)器外部公共地址的設(shè)為1.2.3.4。e1端口為對(duì)應(yīng)內(nèi)網(wǎng)的網(wǎng)關(guān),把地址設(shè)為192.168.2.1,然后給反向代理Apache HTTP Server再加一個(gè)內(nèi)網(wǎng)地址192.168.2.2。
同時(shí)假設(shè)內(nèi)網(wǎng)上使用著 3臺(tái) Web服務(wù)器 A、B和C,它們對(duì)應(yīng)的域名分別為A.AAA.com、B.AAA.com 和C.AAA.com,三 臺(tái) Web服 務(wù)器配置的內(nèi)部地址分別為192.168.2.3、192.168.2.3和192.168.2.5。
假設(shè)園區(qū)網(wǎng)絡(luò)中心在公網(wǎng)上注冊(cè)的外部IP為1.2.3.4,那么在這個(gè)局域網(wǎng)的環(huán)境下DNS服務(wù)器上配置內(nèi)部3臺(tái)Web服務(wù)器域名的IP解析地址就均為1.2.3.4。
這 樣,當(dāng) 在 外 部Internet上解析A.AAA.com、B.AAA.com 和 C.AAA.com時(shí),均會(huì)指向同一IP地址即Apache HTTP Server的公網(wǎng)接口地址1.2.3.4。
從Apache官方網(wǎng)站(http://www.apache.org)下載Apache的版本Apache 1.3.24編譯包到Redhat Linux的root目錄下。
比如,本次安裝采用Apache的下載地址為http://www.apache.org/dist/httpd/apache_1.3.24.tar.gz。
由于Apache默認(rèn)允許的最多連接數(shù)為256,而在一個(gè)高并發(fā)、大流量的網(wǎng)站上這一連接數(shù)量是不能滿足用戶需要的,特別是本文介紹的通過(guò)防火墻上的Apache反向代理允許外部用戶訪問(wèn)多個(gè)內(nèi)部Web服務(wù)器的情況。
那么當(dāng)連接數(shù)量多時(shí)如何處理呢?這時(shí)可以采用更改src/include/httpd.h文件的方法,配置方法如下:
(1)#cd/root切換目錄到/root下
(2)#tar xvfz apache_1.3.24.tar.gz解開apache源文件到/root下
(3)#cd apache_1.3.24進(jìn)入apache_1.3.24目錄
(4)#vi src/include/httpd.h用vi編輯httpd.h文件
(5)在 輸 入“vi src/include/httpd.h”命令后,繼續(xù)輸入“/256”并按“回車”鍵搜索數(shù)字256,將其改為1024后保存并退出即可。
如果,要支持最多為1024個(gè)客戶的同時(shí)請(qǐng)求,不僅需要更改上面提到的源文件,在編譯安裝后還需要設(shè) 置/usr/local/apache/conf/httpd.conf文件,將其中的“MaxClients”一行后面的參數(shù)更改為“1024”。
#cd apache_1.3.24
#./configure--prefix=/usr/local/apache設(shè)置安裝默認(rèn)目錄
--enable-module=most編譯大多數(shù)模塊
--enable-shared=max設(shè)置模塊為DSO(動(dòng)態(tài)共享對(duì)象)模式
--enable-module=proxy啟動(dòng)代理模塊
--enable-shared=proxy安裝代理模塊為DSO模式
--enablemodule=rewrite啟動(dòng)重寫功能模塊
--enableshared=rewrite安裝重寫功能模塊為DSO模式
#make
#make install
安裝所有Apache反向代理方式所需的文件,就都安裝到了/usr/local/apache目錄下。
在/usr/local/apache目錄找到httpd.conf文件,并將下面的內(nèi)容添加至此文件后。
這一段代碼設(shè)置了基于域名的反向代理虛擬主機(jī),這樣當(dāng)您從外部訪問(wèn)IP地址為1.2.3.4的主機(jī),且URL地址后面部分的域名為“AAA.com”,Apache就可以把用戶的請(qǐng)求轉(zhuǎn)發(fā)到局域網(wǎng)內(nèi)部的Web服務(wù)器上,并重寫響應(yīng)數(shù)據(jù)包去掉代理協(xié)議部分。
其 中,“ProxyRequest Off”這一行用來(lái)禁止Apache在IP地址為1.2.3.4的主機(jī)和端口80上進(jìn)行代理服務(wù)。
在這里Apache作為一個(gè)透明的代理服務(wù)器來(lái)使用,而“RewriteEngine on”這一行用來(lái)啟動(dòng)Apache修改響應(yīng)數(shù)據(jù)包的功能,否則下 面 的“RewriteCond”和“RewriteRule”就不會(huì)起任何作用。
在上面Apache HTTP Server的重寫規(guī)則中,重寫后的URL與您所請(qǐng)求的URL是一樣的,然后我們將下面3個(gè)域名放到這臺(tái)服務(wù)器的/etc/hosts文件中。
這樣這臺(tái)Apache HTTP Server就實(shí)現(xiàn)了反向代理,將從內(nèi)部3臺(tái)Web服務(wù)器獲得內(nèi)容,并把它返回給外部的請(qǐng)求者,/etc/hosts文件的域名對(duì)應(yīng)記錄如下:
192.168.2.3 A.AAA.com
192.168.2.4 B.AAA.com
192.168.2.5 C.AAA.com
完成反向代理后,當(dāng)外部用戶訪問(wèn)http://A.AAA.com時(shí),域名會(huì)被翻譯為公網(wǎng)IP地址1.2.3.4,這個(gè)請(qǐng)求會(huì)被送到單位的邊界路由器上,邊界路由器把它交給監(jiān)聽(tīng)Apache反向代理的Apache HTTP Server。
這臺(tái)反向代理服務(wù)器根據(jù)來(lái)路內(nèi)容,向內(nèi)詢問(wèn)/etc/hosts文件中定義的記錄地址,將會(huì)查找到A.AAA.com對(duì)應(yīng)為內(nèi)部的192.168.2.3。
然后從IP地址為192.168.2.3的那臺(tái)Web服務(wù)器上獲取請(qǐng)求內(nèi)容,并將內(nèi)容返回給外部用戶,從而完成內(nèi)部的Web服務(wù)器A.AAA.com對(duì)外提供訪問(wèn)的功能。
在對(duì)Apache配置完畢后,如果以后還需要增加更多的內(nèi)部Web服務(wù)器來(lái)提供外部訪問(wèn)服務(wù),只需要設(shè)置該服務(wù)的訪問(wèn)域名為反向代理服務(wù)的公網(wǎng)IP 1.2.3.4。
然后按照以上的方法配置好Apache HTTP Server的反向代理方式,并在/etc/hosts文件中依次增加相對(duì)應(yīng)的解析記錄即可。