Apache HTTPD 正向(forward)和反向(reverse)代理

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

相關文章
相關標籤/搜索