Apache能夠被配置爲正向(forward)和反向(reverse)代理,下面分別從這兩方面重點介紹:
提供CHM版參考手冊下載:Apache 2.2 簡體中文參考手冊.chm(金步國翻譯)
示例環境爲:windows vista+apache2.2.19,如下配置親測均經過
1、正向代理forward proxy
[1]、概念及用途
正向代理是一個位於客戶端和目標原始服務器之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標原始服務器,而後代理向原始服務器轉交請求並將得到的內容返回給客戶端。客戶端必需要進行一些特別的設置才能使用正向代理,好比咱們常常須要在瀏覽器中設置代理來訪問一些網站。
正向代理的典型用途是爲在防火牆內的局域網客戶端提供訪問Internet的途徑。正向代理還可使用緩衝特性(由mod_cache提供)減小網絡使用率。
[2]、配置及演示
打開文件conf/httpd.conf,搜索到如下內容,去掉註釋加載相應模塊(去掉前面的「#」便可)
引用
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
在文件httpd.conf的末尾加上以下內容:
引用
# module proxy config file
Include conf/extra/httpd-proxy.conf
下一步,建立文件conf/extra/httpd-proxy.conf,內容以下:
Xml代碼
#michale proxy config file
<IfModule mod_proxy.c>
#Forward Proxy(正向代理)
ProxyRequests On
ProxyVia On
#容許本機和以192.168.8前綴IP的主機訪問該代理
<Proxy *>
#注意Deny,Allow之間不要有空格
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.8
</Proxy>
#下面的配置至關於一個二級代理,訪問twitter.com的請求,再轉給本地代理8580端口
ProxyRemote http://twitter.com/ http://127.0.0.1:8580
#ProxyRemoteMatch .*.youtube.com/|.*.twitter.com/ http://127.0.0.1:8580
</IfModule>
#michale proxy config file
<IfModule mod_proxy.c>
#Forward Proxy(正向代理)
ProxyRequests On
ProxyVia On
#容許本機和以192.168.8前綴IP的主機訪問該代理
<Proxy *>
#注意Deny,Allow之間不要有空格
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.8
</Proxy>
#下面的配置至關於一個二級代理,訪問twitter.com的請求,再轉給本地代理8580端口
ProxyRemote http://twitter.com/ http://127.0.0.1:8580
#ProxyRemoteMatch .*.youtube.com/|.*.twitter.com/ http://127.0.0.1:8580
</IfModule>
[3]、緩存cache配置
在文件httpd-proxy.conf中增長以下配置信息:
Xml代碼
LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
LoadModule disk_cache_module modules/mod_disk_cache.so
<IfModule mod_disk_cache.c>
CacheRoot d:/proxycache/
CacheDirLevels 5
CacheDirLength 3
CacheMaxFileSize 1000000
CacheMinFileSize 64
</IfModule>
CacheEnable disk /
CacheDefaultExpire 3600
CacheMaxExpire 86400
# When acting as a proxy, don't cache the list of security updates
#CacheDisable /local_files
CacheIgnoreCacheControl On
CacheIgnoreHeaders Set-Cookie
</IfModule>
LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
LoadModule disk_cache_module modules/mod_disk_cache.so
<IfModule mod_disk_cache.c>
CacheRoot d:/proxycache/
CacheDirLevels 5
CacheDirLength 3
CacheMaxFileSize 1000000
CacheMinFileSize 64
</IfModule>
CacheEnable disk /
CacheDefaultExpire 3600
CacheMaxExpire 86400
# When acting as a proxy, don't cache the list of security updates
#CacheDisable /local_files
CacheIgnoreCacheControl On
CacheIgnoreHeaders Set-Cookie
</IfModule>
相關配置屬性的詳細信息請查閱參考手冊,若是緩存配置成功,訪問頁面後會在目錄d:/proxycache/ 下生成一系列文件夾和文件
2、反向代理reverse proxy
[1]、概念及用途
反向代理正好相反,對於客戶端而言它就是原始服務器,而且客戶端不須要進行任何特別的設置。客戶端向反向代理的命名空間中的內容發送普通請求,接着反向代理將判斷向原始服務器轉交請求,並將得到的內容返回給客戶端,就像這些內容本來就是它本身的同樣。
反向代理的典型用途是將防火牆後面的服務器提供給Internet用戶訪問。反向代理還能夠爲後端的多臺服務器提供負載平衡,或爲後端較慢的服務器提供緩衝服務。另外,還能夠啓用高級URL策略和管理技術,從而使處於不一樣web服務器系統的web頁面同時存在於同一個URL空間下。
[2]、配置及演示
把上面正向代理中的配置文件:conf/extra/httpd-proxy.conf,修改爲以下內容:
Xml代碼
<IfModule mod_proxy.c>
#Reverse Proxy(反向代理)
<Proxy *>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.8
</Proxy>
ProxyRequests Off
#proxy setting
ProxyPass /svnman http://192.168.8.49:8080/svnman
ProxyPassReverse /svnman http://192.168.8.49:8080/svnman
#此處項目名稱/svnman代理時沒有變化,session不會丟失,不須要配置下面的屬性
#ProxyPassReverseCookiePath /svnman /svnman
#能夠配置多反向代理,添加多對ProxyPass、ProxyPassReverse便可
ProxyPass /log http://192.168.8.7:8550/logman
ProxyPassReverse /log http://192.168.8.7:8550/logman
#此處項目名稱/logman代理時爲/log,須要配置以下信息,不然session會丟失
ProxyPassReverseCookiePath /logman /log
#配置跟代理,必需放在最後面,不然其餘二級訪問的反向代理會失敗
ProxyPass / http://127.0.0.1:8082/webdemo/
ProxyPassReverse / http://127.0.0.1:8082/webdemo/
#此處項目名稱 /webdemo/ 代理爲 / 跟目錄訪問,session會丟失,須要配置以下信息
ProxyPassReverseCookiePath /webdemo /
</IfModule>
<IfModule mod_proxy.c>
#Reverse Proxy(反向代理)
<Proxy *>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.8
</Proxy>
ProxyRequests Off
#proxy setting
ProxyPass /svnman http://192.168.8.49:8080/svnman
ProxyPassReverse /svnman http://192.168.8.49:8080/svnman
#此處項目名稱/svnman代理時沒有變化,session不會丟失,不須要配置下面的屬性
#ProxyPassReverseCookiePath /svnman /svnman
#能夠配置多反向代理,添加多對ProxyPass、ProxyPassReverse便可
ProxyPass /log http://192.168.8.7:8550/logman
ProxyPassReverse /log http://192.168.8.7:8550/logman
#此處項目名稱/logman代理時爲/log,須要配置以下信息,不然session會丟失
ProxyPassReverseCookiePath /logman /log
#配置跟代理,必需放在最後面,不然其餘二級訪問的反向代理會失敗
ProxyPass / http://127.0.0.1:8082/webdemo/
ProxyPassReverse / http://127.0.0.1:8082/webdemo/
#此處項目名稱 /webdemo/ 代理爲 / 跟目錄訪問,session會丟失,須要配置以下信息
ProxyPassReverseCookiePath /webdemo /
</IfModule>
注意點說明:
ProxyRequests 反向代理時設置爲Off
ProxyPass、ProxyPassReverse配對出現,若是隻配置了ProxyPass,那麼瀏覽器的地址欄內容會變成反向代理的原始地址
可配置多個反向代理,只要添加多對ProxyPass、ProxyPassReverse便可
若是配置時項目名稱變化了好比上面的 /logman->/log /webdemo/->/,此時的session會丟失,須要增長屬性ProxyPassReverseCookiePath配置(如上面的配置文件)
若是同時配置跟訪問和二級訪問的代理,跟目錄代理的配置必須放在最後面,不然其餘反向代理的配置會失敗
3、啓動異常處理方法
配置文件修改後,若是啓動pache服務失敗,報錯信息相似:the requested operation has failed,有多是配置文件存在語法錯誤不能正常解析,能夠用apaceh提供的httpd相關命令檢查,若是有錯誤會有相關提示,具體用法以下:
引用
d:\Program Files\Apache2.2\bin>httpd -t
Syntax error on line 6 of D:/Program Files/Apache2.2/conf/extra/httpd-proxy.conf:
order takes one argument, 'allow,deny', 'deny,allow', or 'mutual-failure'
#此處是因爲配置文件中allow, deny的逗號後多了空格,去掉後便可經過
D:\Program Files\Apache2.2\bin>httpd -t
Syntax OK web
另外還可能須要配置 ProxyPreserveHost On,若沒有開啓,也不知道爲什麼webapp登陸session 容器沒法正常獲取數據 apache