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

相关文章
相关标签/搜索