R-Proxy-使用Apache架设[2]

[入库:2005年9月19日] [更新:2007年3月24日]

本文简介:

  实际使用上因为 R-Proxy 也许只代理存取内部的 Web 主机, File Cache 的异动及数量不大,
  在一些较复杂及中大型的 Web 网站比较适合,你可以自己斟酌要不要使用 Cache 的功能.
  相关的设定参数如下:
  
   CacheRoot "/var/proxy"
   CacheSize 5
   CacheGcInterval 4
   CacheMaxExpire 24
   CacheLastModifiedFactor 0.1
   CacheDefaultExpire 1
   NoCache a_domain.com another_domain.edu joes.garage_sale.com
  
   使用了 R-Proxy 之后,还有一点不同的地方,就是 httpd log 的内容,原本让任何使用者直接
  存取 Web 主机时, httpd log 内纪录的是联机 Client 的 IP 位置,但使用了 R-Proxy 后, log
  内纪录的都将会是 R-Proxy 的 IP 位置,而 Client 的真实存取纪录则会纪录在 R-Proxy 内的
  httpd log 内,所以要追查联机问题,则需要多检查 R-Proxy 的 httpd log 内容.
  
   目前 R-Proxy 主机只有少数中大型网站有架设,但实际应用上, R-Proxy 是可以改善Web 存取效能,增加实体 Web 主机的安全性,我手上的有关 R-Proxy 资料还不完整,商业产品有很多已利用 R-Proxy 的观念作到多线,异地的负载平衡及容错存取,而且可以支持非 httpd服务.而在要作到像那些产品的功能可能就要考虑以 Squid 来实作 R-Proxy 功能了...
  
   参考资料:
  
   1.Apache - module mod_proxy
   http://httpd.apache.org/docs/mod/mod_proxy.html
  
   2.Netscape Proxy Server - Reverse Proxy
   http://developer.netscape.com/docs/manuals/proxy/adminux/revpxy.htm
  
   3.IBM HTTP Server
   http://tst.sinica.edu.tw/manual/ibm/index.html
  
  第二单元: R-Proxy 的分散负载及主机容错
  
   在上一个单元内,可以发现基本的 R-Proxy 只能单纯的依网页目录分散在不同的主机,而且一个网页目录只能连结一台主机,当某台主机当机,该连结的网页目录便失效了,这种
  单一静态的分散服务及缺乏容错机制的功能,并不是较好的 R-Proxy 功能.
  
   在 http://pihl.kumpu.org/mod_curltunnel.html 有提供一个 CrulTunnel 模块,它
  提供类似于 ProxyPass 及 ProxyPassReverse 的指令 CrulTunnelPass 及 CrulTunnelPassReverse,
  安装 CurlTunnel 模块系统必需要有 http://curl.haxx.se/ 的 libcurl 函数,但实测后发现, CurlTunnel 模块只是使错误连结的 404 错误讯息不再出现,还是不提供容错的功能,所以这也不是我们想要的.
  
   想要解决网页连结错误的问题,必须在 URL 路径发生问题时, Apache 就要自动辨识错误,并导向正确或是错误讯息响应的网址,在 Apache 中就有一个提供这样可以依条件及规则转换URL 路径的模块 - Rewrite, Apache Rewrite 模块是一个功能强大的 URL 路径维护模块,它可以依条件,规则或外部程序,资料来转换网页的 URL 路径.
  
   以下的测试环境,同样是将 R-Proxy 架设在防火墙上,而防火墙内有数台 Web 主机.
  
   首先,你要先确认在你主机上有 Rewrite 模块,而且在 httpd.conf 内有类似下面的设定:
  
   LoadModule rewrite_module /usr/libexec/apache/mod_rewrite.so
   AddModule mod_rewrite.c
  
   首先,启用 Apache Server Status 功能,找到下面这一段,把前的 # 号拿掉,并适当的修改
  Allow from 的位置:
  
   SetHandler server-status
   Order deny,allow
   Deny from all
   Allow from .yourdomain.com
  
   再来,在 httpd.conf 内加入 Rewrite 模块的设定,像下面:
  
   # Rewrite
  
   RewriteEngine on
   RewriteLogLevel 0
  
   RewriteMap server rnd:/etc/httpd/conf/rproxy-server
  
   RewriteRule ^/rproxy-status.* - [L]
   RewriteRule ^(http|ftp)://.* - [F]
  
   RewriteRule ^/(.*\.(cgi|shtml))$ to://${server:dynamic}/$1 [S=1]
   RewriteRule ^/(.*)$ to://${server:static}/$1
  
   RewriteRule ^to://([^/]+)/(.*) http://$1/$2 [E=SERVER:$1,P,L]
  
  RewriteRule .* - [F]
  
  上面的 RewriteMap 后面是指定一个设定档,设定档内是所有要当作分散负载的主机群成员
  位置,主机的性质有两种,一种是只有存有静态资料的 Static 主机,另一种是存有 cgi 及 shtml
  (Server Side Include )的动态处理,假如有数台 Web 主机,就可以将它们的位置设定在上面
  所指定的 rproxy-server 内,内容像下面:
  
   static w1.test.com|w2.test.com|w3.test.com|w4.test.com
   dynamic w5.test.com|w6.test.com
  
   然后在 httpd.conf 内把 proxy 模块的设定加入,像下面:
  
   ProxyRequests On
   NoCache *
   ProxyPassReverse / http://w1.test.com/
   ProxyPassReverse / http://w2.test.com/
   ProxyPassReverse / http://w3.test.com/
   ProxyPassReverse / http://w4.test.com/
   ProxyPassReverse / http://w5.test.com/
   ProxyPassReverse / http://w6.test.com/
  
  再来只要重新激活 httpd 就可以了,你可以先在这 6 台 Web 主机存放不同的网页内容,再使用
  Browser 联机测试,你可以发现网页的内容,会在一直不断的轮询,若是将其中一台主机离线,再测试,
  你可以发现并不会发生联机错误,也就是说 proxy + rewrite 的 R-Proxy 功能,除了会分散负载,
  还有主机容错的功能.
  
   等要正试上线时,只要定时同步这 6 台网页主机的内容,而 cgi 动态处理部份是由于上面范例中的
  w5,w6 两台主机来处理. httpd log 部份如同第一单位所说, Client 的真实 IP 只会存在于 R-Proxy
  那台的 httpd log 内,而其它所有的 Web 主机,只会记录 R-Proxy 主机 IP 来存取.
  
   目前上面这些设定的环境,都是以主机同时存在同一个地方为主,要作到异地的 Web 网站平衡负载,
  就要搭配 DNS Round-Robin 的方式来达成.
  
   利用 R-Proxy 的作法是比 Linux LVS 的作法单纯而且简单多,假如在 Rewrite 内多加一些权重的
  计算及分配, R-Proxy 所以提供的功能并不会输给 Linux LVS, 功能上主要的差别应该是 Linux LVS
  可以提供多台 Cluster 的 Controler, 而且可以自动备援切换.
  
   参考资料:
  
   1.Apache module mod_rewrite
   http://httpd.apache.org/docs/mod/mod_rewrite.html
  
   2.Apache URL Rewriting Guide
   http://www.engelschall.com/pw/apache/rewriteguide/
  
  第三单元: Apache 1.3 mod_proxy 模块安全性问题
  

本文关键:R-Proxy-使用Apache架设
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top