這個功能分成好幾個模組,最基本的模組是 mod_proxy,其餘的依照其通訊協定分為 mod_proxy_http、 mod_proxy_ftp、 mod_proxy_ajp、 mod_proxy_balancer 與 mod_proxy_connect,因此若是要使用其中一個或多個協定時,就先載入 mod_proxy 之後,在依照所需要的協定載入對應的模組,例如要使用 HTTP 網頁的 Proxy 就載入 mod_proxy_http 模組。
另外,有一些 Proxy 相關的功能可以利用 Apache 的其它模組來達成,像 Cache 的話就要使用 mod_cache 模組,而 SSL/TLS 加密傳輸的功能就使用 mod_ssl 模組中的 SSLProxy* 語法來設定。
Apache 的 Proxy 功能可以分為 forward 與 reverse(gateway)兩種模式,以下介紹這兩種模式與其中的差異。
Forward Proxy
所謂的 forward 模式其實就是提供一般熟知的 proxy 功能,forward proxy 是一個仲介伺服器,在使用者(client)要與原始伺服器(origin server)互相傳遞資料時,它就夾在使用者端與原始伺服器之間幫忙遞送資料,當使用者要抓取原始伺服器的資料時,就送一個 request 至 forward proxy,並註明要原始伺服器的資料,這樣 forward proxy 就會幫忙抓取原始伺服器上的資料後,再傳回給使用者,而這種情況使用者必須自行設定好要使用的 forward proxy。
forward proxy 通常用在封鎖在區域網路的使用者,透過 forward proxy 統一管制使用者所瀏覽的網站,或藉由 cache 功能,減低網路的流量負載。
在 Apache 中若是要啟動 forward proxy 功能,可使用 ProxyRequests 語法,但由於 forward proxy 功能可以讓使用者自己決定瀏覽的網站,所以在開啓這個功能時,也要同時做好相關的安全性設定,只讓有經過認證的使用者使用。
看個最簡單的 forward proxy 範例:
ProxyRequests On ProxyVia On <Proxy *> Order deny,allow Deny from all Allow from internal.example.com </Proxy>其實要開啓 forward proxy 的方式就只是把 ProxyRequests 開起而已,再加上權限設定,這裡是設定只有 internal.example.com 可以使用 proxy 功能。ProxyVia 則是開啓 Via 表頭功能,讓所有的 request 與 reply 都加上 Via 表頭。
Reverse Proxy
reverse proxy 以使用者的角度來看,就跟一般的網頁伺服器沒有兩樣,使用者在使用時不需要任何設定,使用者把 reverse proxy 當作一般的網頁伺服器,依照一般正常的程序向 reverse proxy 送出 request,而 reverse proxy 會自己決定向哪一台原始伺服器抓取資料,最後再將抓取到的資料轉送回給使用者,對於使用者而言,reverse proxy 就好像一台普通的網頁伺服器一樣。reverse proxy 可以讓使用者使用躲在防火牆背後的伺服器,或是用於好幾台伺服器之間的負載平衡,另外也可以讓好幾台伺服器組合成一個單一的 URL 空間。
若要啓動 Apache 的 reverse proxy 功能,可以使用 ProxyPass 語法,或是使用 RewriteRule 語法的 [p] 旗標。
在使用 reverse proxy 時,不需要開啟 ProxyRequests 功能,這個功能若是不小心開啟,會有安全上的問題!所以要注意。
看個最簡單的 reverse proxy 範例:
ProxyPass /foo http://foo.example.com/bar ProxyPassReverse /foo http://foo.example.com/bar這樣 reverse proxy 收到 /foo 的 request,就會去抓取 http://foo.example.com/bar,再送回給使用者。
參考資料:
http://httpd.apache.org/docs/2.1/mod/mod_proxy.html
沒有留言:
張貼留言