基於Apache的反向代理服務器

衆所周知Apache是目前最優秀的HTTP服務器。實際上它不僅能當作服務器使用,也能夠被用來架設代理服務器。本文就如何使用Apache架設HTTP代理服務器進行說明。

本文將基於Win32版的Apache 2.0.47進行說明。以前的Apache 1.x版配置方法稍有不同,但這裏不作說明。

 

首先是Apache的安裝。從 http://www.apache.org 上下載Apache的安裝程序,雙擊安裝程序進行安裝。安裝好之後屏幕右下方系統托盤中會出現一個紅色的羽毛狀圖標,那就是Apache的控制程序。單擊此圖標以啓動Apache服務器。這時打開IE並在IE的地址欄中輸入http://localhost/ 應當能夠看到Apache的歡迎畫面。

接下來我們修改Apache的配置文件使其支持HTTP代理服務器功能。用文本編輯器打開httpd.conf文件。該文件位於Apache安裝目錄的conf目錄下。如果你在安裝Apache的時候沒有改變安裝路徑,那麼它應當位於C:/Program Files/ApacheGroup/Apache/conf/httpd.conf。

首先要添加代理服務器模塊。找到下面這幾行:

#LoadModule proxy_module modules/mod_proxy.so

#LoadModule proxy_connect_module modules/mod_proxy_connect.so

#LoadModule proxy_http_module modules/mod_proxy_http.so

#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

去掉前面的#號使相應的模塊生效。然後使用托盤中的Apache控制程序重新啓動Apache。(也可以使用命令行net stopapache2然後net start apache2命令進行服務器重啓。)這時Apache應該能夠正常啓動,雖然現在它還不是代理服務器。

然後我們在配置文件中加入下面這一行:

ProxyRequests   On

然後再次重新啓動Apache。這時Apache就是HTTP代理服務器了。打開IE,選擇菜單“工具→Internet選項→連接→局域網設置”,選中“爲LAN使用代理服務器”,然後在下方的地址中填入127.0.0.1,端口填寫80。填好之後確定,此時如果能夠通過IE連接到Internet,則說明代理配置正確無誤。(注:此處的端口80是httpd.conf中Listen指令指定的端口號。如果你修改了Listen命令使Apache監聽其他端口,那麼在IE的設置中也請做相應的改變。另外,如果你使用撥號連接的話,那麼請在“工具→Internet選項→連接”中修改相應的撥號連接的代理設置,而不要修改局域網代理設置)

接下來我們嘗試一下訪問控制。編輯httpd.conf,加入下面的設置:

<Proxy *>

    Order allow,deny

    Allow from all

    Deny from 127.0.0.1

</Proxy>

此配置的意思是,允許除本地計算機之外的所有計算機訪問代理。然後重新啓動Apache。再次試圖使用IE連接Internet,你會收到類似於下面的信息:

Forbidden

You don't have permission to access http://www.google.com/ on this server.

說明本地計算機已經被禁止使用代理。而相反地,下面的設置:

<Proxy *>

    Order deny,allow

    Deny from all

    Allow from 127.0.0.1

</Proxy>

的意思是,僅允許本地計算機使用代理服務器。

Proxy指令後面的*號表示客戶端使用代理服務器訪問的目的地址。在上面兩個例子中,*號表示所有地址,即禁止使用代理服務器訪問所有地址。而如果想僅禁止某一些地址時,可以參考下面的例子:

<Proxy http://www.google.com/>

    Order deny,allow

    Deny from all

    Allow from 127.0.0.1

</Proxy>



<Proxy http://www.yahoo.co.jp/r/*>

    Order allow,deny

    Allow from all

    Deny from 127.0.0.1

</Proxy>

上面這個例子的意思是,僅允許本地計算機訪問http://www.google.com/,並且禁止本地計算機對於http://www.yahoo.co.jp/r/下的資源的訪問。由於Apache的Proxy指令目前還不能夠支持多個目標地址,也就是說不能寫成<Proxy http://www.google.com/ http://www.yahoo.co.jp>的形式,因此如果你想對多個目標地址做出限制時,必須使用多個Proxy指令。

如果想對所有使用者(而不僅僅是部分使用者)訪問某些地址做出限制時,可以使用ProxyBlock的指令:

ProxyBlock microsoft co.jp www.google.com

上面這條指令阻擋了三種目標地址:包含microsoft的地址,包含co.jp的地址,包含www.google.com的地址。但是實際使用IE測試時你會發現,http://www.google.com/http://www.google.co.kr/(Google韓國站)將都不能訪問,而http://www.google.co.kr/並沒有滿足上面阻擋的規則。這是因爲,Apache啓動時將對阻擋地址中看起來像是主機名或者域名的字符串進行域名解析,如果解析成功就阻止掉相應的目標IP地址。而www.google.co.kr和www.google.com的IP地址相同,因此www.google.co.kr也同時被阻擋了。另外,由於Apache試圖去解析域名,因此當你使用ProxyBlock時,Apache的啓動時間會變長。

另外要注意,如果寫ProxyBlock *,那麼將不能通過該代理服務器來訪問任何地址。

最後再介紹一下二級代理。使用Apache可以做二級代理,即讓本身已經是代理服務器的Apache通過其他的代理服務器來連接Internet。加入以下指令:

ProxyRemote * http://12.34.56.78:8080

即可讓Apache將12.34.56.78:8080作爲代理服務器。ProxyRemote指令之後的第一個參數表示協議名稱或目標地址,例如:

ProxyRemote ftp http://12.34.56.78:8080    # 對於所有ftp請求使用二級代理

ProxyRemote http://www.google.com/ http://12.34.56.78:8080    # 當訪問www.google.com時使用二級代理
發佈了14 篇原創文章 · 獲贊 11 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章