分享
 
 
 

R-Proxy-使用Apache架设

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

作者: Duncan Lo

适用对象: 防火墙或系统管理员.

适用条件: 对 Linux 环境有基础的管理及操作能力.

文章附注: 本篇文章为自由文件,欢迎非商业性质转载,并请注明出处!

商业性质转载请来信告知!

特别注意: 1.本篇文章提供之程序及设定*不一定*符合您的环境,

请依您的系统环境适当地修改程序及设定.

2.在执行任何具破坏性的动作及行为前,

请确认您已作好完整可用的资料备份工作.

3.请把整篇文章看完再发问,谢谢!

本文共分四个单元,第一单元是简介 R-Proxy 基本观念,及使用 Apache 架设

R-Proxy 的方法基本设定,第二单元是利用 Apache Rewrite 模块,使用 R-Proxy 设定

Web 主机的分散负载及主机容错的功能,第三单元是探讨 Apache 1.3 上的 mod_proxy

模块之安全性问题,第四个单元是由 kefore 网友提供的 Apache 2 上的 R-Proxy 架设

心得.

第一单元: 架设 R-Proxy

一般的 Proxy 主机,是服务内部的 Client 上网用的,通常都是用 Squid 架设,

同时为了存取效率及节省频宽, Squid 本身也提供 Cache 的功能,所以一般 Proxy主机也称为 Proxy Cache Server 代理快取服务器.

R-Proxy 本身也是一种代理服务器,那个 R 代表的是 Reverse 反向的意思,最主要的用途是反过来代理,替 Internet 的使用者代理存取内部受限制的网站,假如有开启 Cache 功能,它同样可以提供 File Cache 的功能,简单来说 R-Proxy

就像是把 Proxy 的架构及需求,反向过来,使用者角色对调的意思.详细的介绍可以参考最后面的 Netscape Proxy Server - Reverse Proxy 图文.

R-Proxy 实际应用上多与防火墙整合在一起,代理存取内部的网站,不让外部使用者直接存取内部受限制及保护之网站,或是将 Web 依目录结构由数台主机来分散服务,实测上,只要路径及设定正确,该 R-Proxy 可以支持如html,php,asp,java及cgi程序的

Web 环境.而内部的 Web 主机可以设限只有 R-Proxy 的 IP 位置才可来存取,而一般的Internet 使用者不行直接存取,相当于把 R-Proxy 当成一台虚的 Web 主机,相对的,

网站的安全性也提高了.

在使用上, 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 这个

作快取代理的软件弄混了...

首先,你要先确认你的 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_domain.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 网站比较适合,你可以自己斟酌要不要使用 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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有