注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 Exchange服务器系列课程之..
 帮助

反向代理WEB站点的步骤


2007-08-16 20:34:59
 标签:反向代理 web HTTP   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dannyyuan.blog.51cto.com/212520/38560
由于在公司的IDC(因特网)上开发了几个分析/统计工具软件用WEB发布,所以安全性特别地被美国的经理提起(特别从被某大公司收购后,公司对安全性要求越来越高,越来越严格)。基本上在软件层面上,需要授权的地址域,公司办公域用户,软件内建的用户数据库几层保护。并且最好不要对IT管理员提什么要求,尽量在应用层上解决。
一开始,被建议的思路是在内网建一个IIS服务器作为转发/代理IDC里WEB服务器的请求。IIS集成NT域,但是在转发/代理时,发现只能作跳转,无法KEEP连接的SESSION/COOKIE等,不是真正的代理机制。不知是MS的软件总是太在意易用性,而忽略这么实在的功能了,还是我没有研究透(也没有花时间去研究,在网上找了例子试验后没成功就放弃)。
想到APACHE的开放性设计,用其作代理应该不需要太多的设置。结果一下子在APACHE配置文档上就找到转发代理/反向代理的配置(http://httpd.apache.org/docs/2.0/mod/mod_proxy.html)。所以问题就变成在代理APACHE服务器上实现NT域认证机制了, 这个可是很多实例的了,同样的APACHE配置文档也提到,我还是用CGI的模块(http://search.cpan.org/~chansen/Authen-Simple-LDAP-0.2/lib/Authen/Simple/ActiveDirectory.pm)来实现了。
接下来的问题是,SSL连接存在证书问题无法代理,域用户和软件内建用户库的对接问题。第二个问题用代码来实现估计不难,第一个问题不知是不是需在代理LINUX上安装证书?还是需其他的设置,正在进行中。。。
 
关于转发代理/反向代理的概念,在此说两句,提醒自己不要混淆:转发代理是客户浏览器上所设代理的响应服务器。也就是代WEB CLIENT转发请求(请求是真实的URL,但其无法直接到达)来实现隔离/连接的方法;反向代理则是把所有客户端发往自己的请求转到受保护的服务器来处理,并把响应结果再转发给CLIENT端。其实两种代理都可以解决上述问题,只是转发代理需要客户端来回配置代理(防止代理服务器太忙),没有反向代理来得直观。

本文出自 “守望者的技术日记和六味生活” 博客,请务必保留此出处http://dannyyuan.blog.51cto.com/212520/38560



上一篇 Chart module的一个bug  下一篇 女儿的表演



    文章评论
 
2007-08-16 20:44:30
所以事后总觉得MS的东西在某些方面不是很地道。

2007-08-16 21:18:07
转发代理是客户浏览器上所设代理的响应服务器
看过

2007-08-17 20:51:06
留下的两个问题,第一个还没有想解决,因为不急也估计问题不大,第二个问题需要软件代码作支持,思路是用mod_rewrite来实现。只是下班前还没有搞定,因为其他工作的原因,没有剩余多少时间来实践这个思路。
RewriteCond %{REMOTE_USER} ^(.*)$
RewriteRule /aaa/login http://ipa/aaa/login?username=%1
可是在BACKEND WEB服务器跟踪来看,只有/aaa/login?username=, 后面的REMOTE_USER没有代入,不知什么原因。如果能代入,代码改动就是信手拈来了。---有人知道的话请留言,万分感谢。
只有期待下周一有美好的进展了。

2007-08-17 21:04:54
http://www.host01.com/article/server/00070002/0621409075193649.htm, 说的可能能解决第一个问题,不过我不知道如果设置SSLVerifyClient require改为SSLVerifyClient none就可以符合我的需求了。毕竟SSL在此只是加密,安全认证没有必要,家里人访问嘛。

2007-08-20 09:43:10
摘自apache的mod_rewrite文档:
特殊形式 %{LA-U:variable} 它是一个预设的值, variable的最终值在执行一个内部的(基于URL的)子请求后决定。在重写需要使用一个尚未有效的但是会在之后的API程序段中设置的变量的时候,就会使用这个方法。比如,需要在服务器级配置(httpd.conf文件)中重写REMOTE_USER变量,则,必须使用%{LA-U:REMOTE_USER},因为此变量是由认证程序段设置的,而这个程序段是在mod_rewrite所在的URL转译程序段之后才执行的。但是,因为mod_rewrite是通过API修正程序段来实现目录级(.htaccess file)配置的,而这个程序段在认证程序段之前就执行了,所以用%{REMOTE_USER}就可以了。
根据文档中所说,我的RewriteRule无效是因为REMOTE_USER在NT认证之前还没有设置,所以需改为LA-U:REMOTE_USER。经此改动,username=xxx成功了。看来文档必须认真的读懂哦。
现在只剩下ssl证书的问题了。

2007-08-20 15:17:32
很高兴,最后一个问题也搞出来了。

在APACHE作为反向代理时,如果需要支持SSL代理,必须加配置SSLProxyEngine On (context: server config, virtual host)。
如果BACK-END SERVER配置成只支持持安全证书的client访问(SSLVerifyClient require,SSLVerifyDepth 10),还必须在代理上安装该证书。(对我的应用来说,这是多余的了,因为唯一的client就是我的代理了。)
http://www.host01.com/article/server/00070002/0621409075193649.htm是一篇好文章,介绍了如何在apache上构建ssl认证的步骤。   谢谢作者。

2007-08-20 20:21:56
http://dannyyuan.blog.51cto.com/212520/39088, 我的另一篇工作随记, 傻瓜式地给出了安装SS认证L服务器的步骤, 提醒自己可以照葫芦画瓢。 终于可以长舒一口气!

2007-09-01 02:37:18
今天得到一个可能的规则。就是发现重写机制对于SSL来说,必须放至对应VIRTUALHOST节中,而代理机制可在SERVER全局位置中,对SSL同样生效。

2007-11-09 21:57:29
确认!
SSL rewrite rules 须在 ssl.conf的virtualhost节中。
HTTP rewrite rules 通常在 httpd.conf中。

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: