Linux防火墻上的Apache反向代理
本文所使用的測試環(huán)境是Redhat Linux 7.2、Apache 1.3.24,公司域名假設是company.com。公司的典型網(wǎng)絡(luò )構造如附圖所示。
Linux防火墻上的Apache反向代理
注意: 附圖中的防火墻上安裝了2塊網(wǎng)卡,其中e0端口的外部公共地址為1.2.3.4,e1端口對應內部保留地址為192.168.2.1。局域網(wǎng)內部有3臺 Web服務(wù)器A、B和C,它們對應的域名分別為weba.company.com、webb.company.com和 webc.company.com,均使用內部保留地址。

如附圖所示,此公司通過(guò)專(zhuān)線(xiàn)連入互聯(lián)網(wǎng),安裝了防火墻,局域網(wǎng)內部有3臺Web服務(wù)器,均只有內部保留地址,但是希望他們能夠提供對外的Web服務(wù)。
1.設置DNS
在防火墻(同時(shí)也是公司的DNS服務(wù)器)上設置內部3臺Web服務(wù)器的DNS,IP地址均為1.2.3.4。這樣,在Internet上解析 weba.company.com、webb.company.com 和webc.company.com時(shí),均指向同一IP地址即防火墻的外部接口地址1.2.3.4。
2.下載Apache
從Apache網(wǎng)站(http://www.apache.org)下載目前最新的版本apache 1.3.24到/root目錄,下載地址為http://www.apache.org/dist/httpd/apache_1.3.24.tar.gz。
3. 更改源代碼使最大允許的請求連接數超過(guò)256
由于A(yíng)pache默認允許的最多連接數為256,而在一個(gè)繁忙的網(wǎng)站上這一連接數量也許不能滿(mǎn)足需要,特別是本文介紹的通過(guò)防火墻上的 Apache反向代理允許外部用戶(hù)訪(fǎng)問(wèn)多個(gè)內部Web服務(wù)器的情況,可以采用更改src/include/httpd.h文件的方法,具體步驟如下。
#cd/root 切換目錄到/root下
#tar xvfz apache_1.3.24.tar.gz 解開(kāi)apache源文件到/root下 #cd apache_1.3.24 進(jìn)入apache_1.3.24目錄
#vi src/include/httpd.h 用vi編輯httpd.h文件
在輸入“vi src/include/httpd.h”命令后,繼續輸入“/256”并按“回車(chē)”鍵搜索數字256,將其改為1024后保存并退出即可。
本文引用地址:http://dyxdggzs.com/article/201706/349436.htm
注意事項:
①要支持最多為1024個(gè)客戶(hù)的同時(shí)請求,不僅需要更改上面提到的源文件,在編譯安裝后還需要設置/usr/local/apache/conf/httpd.conf文件,將其中的“MaxClients”一行后面的參數更改為“1024”。
②如果您僅僅為了進(jìn)行測試,或者不會(huì )有很多人使用,可以不修改httpd.h文件。
4. 編譯Apache
編譯代碼如代碼1所示。
代碼1
#cd apache_1.3.24
#./configure --prefix=/usr/local/apache
--enable-module=most
--enable-shared=max
--enable-module=proxy
--enable-shared=proxy
--enable-module=rewrite
--enable-shared=rewrite 設置安裝默認目錄
編譯大多數模塊
設置模塊為DSO(動(dòng)態(tài)共享對象)模式
啟動(dòng)代理模塊
安裝代理模塊為DSO模式
啟動(dòng)重寫(xiě)功能模塊
安裝重寫(xiě)功能模塊為DSO模式
注意: 在編譯Apache的時(shí)候,必須編譯大多數模塊,并將它們設置為DSO模式,同時(shí)啟動(dòng)proxy和rewrite模塊,同時(shí)也將其設置為DSO模式。
#make
#make install
將安裝所有Apache所需文件到/usr/local/apache目錄下。
5.在httpd.conf文件中設置基于域名的虛擬主機
在/usr/local/apache目錄找到httpd.conf文件,并將下面的內容添加至此文件后。
NameVirtualHost 1.2.3.4:80
VirtualHost 1.2.3.4:80 >
ServerAdmin root@company.com
DocumentRoot /usr/local/apache/htdocs
ServerName default.company.com
ErrorLog /usr/local/apache_http/logs/error_log
CustomLog /usr/local/apache_http/logs/access_log combined
UseCanonicalName Off
ProxyRequests Off
RewriteEngine on
RewriteCond %{HTTP_HOST}.*.company.com$
RewriteRule ^/(.*)$ http://%{HTTP_HOST}/$1 [P,L]
/VirtualHost >
注意事項:
①上面設置了基于域名的反向代理虛擬主機,這樣當您從外部訪(fǎng)問(wèn)IP地址為1.2.3.4的主機,且URL地址后面部分的域名為“company.com”,Apache就可以把用戶(hù)的請求轉發(fā)到局域網(wǎng)內部的Web服務(wù)器上,并重寫(xiě)響應數據包去掉代理協(xié)議部分。
②“ServerName”一行可以任意指定。
③“ProxyRequest Off”一行用來(lái)禁止Apache在IP地址為1.2.3.4的主機和端口80上進(jìn)行代理服務(wù),在這里Apache作為一個(gè)透明的代理服務(wù)器來(lái)使用。
④“RewriteEngine on”一行用來(lái)啟動(dòng)Apache修改響應數據包的功能,否則下面的“RewriteCond”和“RewriteRule”將不起作用?! ?.添加記錄進(jìn)入/etc/hosts文件
在上面的虛擬主機重寫(xiě)規則中,重寫(xiě)后的URL與您所請求的URL是一樣的,我們的設想是將下面3個(gè)域名放到防火墻的/etc/hosts文件中,這樣Apache將從內部3臺Web服務(wù)器獲得內容,并返回給外部用戶(hù),域名對應記錄如下。
192.168.2.2 weba.company.com
192.168.2.3 webb.company.com
192.168.2.4 webc.company.com
三、總結
這樣,當外部用戶(hù)訪(fǎng)問(wèn)http://weba.company.com時(shí),請求被送到防火墻的Apache上,而防火墻上的Apache反向代理將根據/etc/hosts文件中定義的記錄直接從IP地址為192.168.2.2的Web服務(wù)器獲取內容并返回給外部用戶(hù),從而完成內部Web服務(wù)器weba.company.com對外提供訪(fǎng)問(wèn)的功能。
在對Apache配置完畢后,如果還需要增加更多的內部Web服務(wù)器來(lái)提供外部訪(fǎng)問(wèn)服務(wù),只需設置其DNS服務(wù)器的IP地址為1.2.3.4,并在/etc/hosts文件中增加相應記錄即可。
評論