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
相关文章读者评论发表评论 |