专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Linux » apacheproxy:R-Proxy - 使用Apache架设 »正文

apacheproxy:R-Proxy - 使用Apache架设

来源: 发布时间:星期四, 2009年2月12日 浏览:32次 评论:0



  作者: Duncan Lo < [email protected] >
  
  适用对象: 或系统管理员.
  适用条件: 对 Linux 环境有基础管理及操作能力.
  文章附注: 本篇文章为自由文件,欢迎非商业性质转载,并请注明出处!
   商业性质转载请来信告知!
  特别注意: 1.本篇文章提供的及设定*不定*符合您环境,
   请依您系统环境适当地修改及设定.
   2.在执行任何具破坏性动作及行为前,
   请确认您已作好完整可用资料备份工作.
   3.请把整篇文章看完再发问,谢谢!
  
   本文共分 4个单元,第单元是介绍 R-Proxy 基本观念,及使用 Apache 架设
  R-Proxy 思路方法基本设定,第 2单元是利用 Apache Rewrite 模块,使用 R-Proxy 设定
  Web 主机分散负载及主机容错功能,第 3单元是探讨 Apache 1.3 上 mod_proxy
  模块的性问题,第 4个单元是由 kefore 网友提供 Apache 2 上 R-Proxy 架设
  心得体会.
  
  第单元: 架设 R-Proxy
  
   Proxy 主机,是服务内部 Client 上网用,通常都是用 Squid 架设,
  同时为了存取效率及节省频宽, Squid 本身也提供 Cache 功能,所以般 Proxy主机也称为 Proxy Cache Server 代理快取.
  
   R-Proxy 本身也是种代理,那个 R 代表是 Reverse 反向意思,最主要用途是反过来代理,替 Internet 使用者代理存取内部受限制网站WebSite,假如有开启 Cache 功能,它同样可以提供 File Cache 功能,简单来说 R-Proxy
  就像是把 Proxy 架构及需求,反向过来,使用者角色对调意思.详细介绍可以参考最后面 Netscape Proxy Server - Reverse Proxy 图文.
  
   R-Proxy 实际应用上多和整合在起,代理存取内部网站WebSite,不让外部使用者直接存取内部受限制及保护的网站WebSite,或是将 Web 依目录结构由数台主机来分散服务,实测上,只要路径及设定正确,该 R-Proxy 可以支持如html,php,asp,java及cgi
  Web 环境.而内部 Web 主机可以设限只有 R-Proxy IP 位置才可来存取,而Internet 使用者不行直接存取,相当于把 R-Proxy 当成台虚 Web 主机,相对,
  网站WebSite性也提高了.
  
   在使用上, Proxy Cache 需要 Clien t在 IE, Netscape 内设定,或是在 Firewall上设成通透式Cache方式,才可以使用 Proxy Cache 功能,但用 R-Proxy, 使用者是完全不用作任何设定,只要 Firewall 或 Web 管理员把 R-Proxy 设好就行了.
  
   R-Proxy 作法有很多种,使用 Apache 架设是目前最容易思路方法,请特别注意,以下教学是以 TurboLinux 7 Server 及 Apache 1.3.20 作示范,你实际环境可能会需要作些修改.还有以下所说 Proxy 是指种功能,请不要跟 Squid 这个
  作快取代理软件Software弄混了...
  
   首先,你要先确认你 Apache 有 proxy 这个 modules, 通常在httpd.conf内
  会有像下面两行 modules 设定:
  
   LoadModule proxy_module /usr/libexec/apache/libproxy.so
   AddModule mod_proxy.c
  
   确定 Apache 有 Proxy 这 modules 后,就可以开始来设定,找到下面这段:
  
   在里面加上或把某几行#拿掉,内容大概会像这样:
  
   ProxyRequests On
  
   Order deny,allow
   Deny from all
   Allow from .your_do.com
  
   把 Allow from 修改成你予许来源位置.接下要设定你要代理Web主机位置,把设定加入:
  
   ProxyPass / http://192.168.1.7/
  
   上面那个 / 是指 Web 根目录,后面网址是内部 Web 主机位置.
  
   Ok!完成,可以用 Browser 连到你架 R-Proxy 主机试试,若是 R-Proxy 架在
   Firewall 上,可能要把 httpd port 作适度开放,但不再需要作转 port 动作,你会发现,你连到 R-Proxy 主机网页内容就是你指定那台 Web 主机.
  
   你也可以把网页分散在区别主机上,只有个 Web 主目录,所以可以依Web 目录来分,设定思路方法像:
  
   ProxyPass / http://192.168.1.3/
   ProxyPass /webmail http://192.168.1.2/webmail/
   ProxyPass /sales http://192.168.1.7/
   ProxyPass /bbs http://192.168.1.10:8888/
  
   这边有个重点,就是各主机网页目录结构位置最好也是依循Web主目录结构,像上面第 1 跟第 2 行执行应该不会有问题,不过第 3, 4 行,就不定可行, Web 路径可能会不对,特别是该目录有又有次目录时,这 R-Proxy 是作代理存取动作,而不是作转址动作,所以可能需要另外搭配 ProxyPassReverse 指令.就像这样:
  
   ProxyPass / http://192.168.1.3/
   ProxyPass /webmail http://192.168.1.2/webmail/
   ProxyPassReverse /webmail http://192.168.1.2/webmail/
   ProxyPass /sales http://192.168.1.7/
   ProxyPassReverse /sales http://192.168.1.7/
   ProxyPass /bbs http://192.168.1.10:8888/
  
   这样像 http://192.168.1.2/webmail/images 就会转到 /webmail/images 去,而不是 /images 这个路径,不过还需注意,就是次目录指定在网页写法,还是必须以"相对位置"方式撰写,使用"绝对位置"方式还是有出错可能.
  
   我测试 Apache proxy module 是不提供轮询功能,所以假如你设定是下:
  
   ProxyPass / http://192.168.1.3/
   ProxyPass / http://192.168.1.2/
  
   基本上,还是只有第 1 条设定生效,而且也不提供容错功能,所以上面设定指第 1 台主机挂了,网页还是连不到,它不会自动启用第 2 条设定,这部份就必须要搭配 Apache rewrite 模块或其它具有侦测 r-rproxy 模块了.
  
   假如你想激活 Cache 功能,可以参考 Apache 设定手册,增加几个有关 Cache 设定,
  实际使用上 R-Proxy 也许只代理存取内部 Web 主机, File Cache 异动及数量不大,
  在些较复杂及中大型 Web 网站WebSite比较适合,你可以自己斟酌要不要使用 Cache 功能.
  相关设定参数如下:
  
   CacheRoot "/var/proxy"
   CacheSize 5
   CacheGcInterval 4
   CacheMaxExpire 24
   CacheLastModiedFactor 0.1
   CacheDefaultExpire 1
   NoCache a_do.com another_do.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 主机只有少数中大型网站WebSite有架设,但实际应用上, 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
  
   2scape 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
  
  第 2单元: 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
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: