1. 程式人生 > >使用Apache架設代理伺服器

使用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/Apache Group/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 stop apache2然後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>

如果想對所有使用者(而不僅僅是部分使用者)訪問某些地址做出限制時,可以使用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時使用二級代理