ApacheHTTPD正向(forward)和反向(reverse)代理

coding

Apache可以被配置为正向(forward)和反向(reverse)代理,下面分别从这两方面重点介绍: 



提供CHM版参考手册下载:Apache 2.2 简体中文参考手册.chm(金步国翻译) 



示例环境为:windows vista+apache2.2.19,以下配置亲测均通过 



一、正向代理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/ 下生成一系列文件夹和文件 



二、反向代理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配置(如上面的配置文件) 


如果同时配置跟访问和二级访问的代理,跟目录代理的配置必须放在最后面,否则其他反向代理的配置会失败 




三、启动异常处理方法 


      配置文件修改后,如果启动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

另外还可能需要配置 ProxyPreserveHost On,若没有开启,也不知道为何webapp登录session 容器无法正常获取数据 

以上是 ApacheHTTPD正向(forward)和反向(reverse)代理 的全部内容, 来源链接: utcz.com/z/509255.html

回到顶部