stone2083

Hosts绑定新思路之HTTP代理篇

前言

此文摘自2011年3月22日邮件分享


现状

平时开发,测试,功能预演阶段,为了能够正常访问应用,需要做Hosts绑定.随着应用数量的不断增多,绑定量也是急剧上升.例如最近工作平台三期项目,需要绑定的环境多达44个.一旦有变动,需要通知所有人员做本地Hosts的调整,维护成本那是相当地大.

 

用一张图,来描述下目前我们的方案:


 

如果站在面向对象编程的角度,来思考这张图,我们会发现.

1.       利用客户端本地Hosts绑定来实现,并且客户端数量不可控—利用客户端解决需求,但客户端维护不在可控范围内

2.       Hosts绑定是非常不稳定的—需求易变

 

这样的设计,违反了”封装变化”的设计原则,故一旦有变动,维护成本非常大.

 

新方案思路

按照”封装变化”的设计原则,我们就应该把”域名绑定”这个易变需求,进行统一管理.

看上图,我们会发现,DNS的职责就是做域名解析的,并且DNS管理比较可控.

于是第一反应,我们可以使用内部域名解析服务器来绑定这些域名.

但是问题又来了,DNS来做测试环境域名解析,太重量级了.同一个域名,对应测试服务器IP有多个,绑定哪一个好呢?并且域名对应IP不断变化,IT DNS负责人不被我们累死啊? 

 

既然DNS上做文章不可行,又需要统一管理的地方,那么我们只能再抽象出一个新的概念来.

同样,我们利用一张图,来描述下整体架构.



与上图相对,此图多了一个”代理服务器”的概念,即Hosts绑定动作在此概念上完成.

流程如下:

1.       客户端浏览器设置代理服务器,将所有请求发送到代理服务器上

2.       代理服务器检查本地Hosts绑定,如绑定则直接解析,反之进入流程3

3.       代理服务器通过内部域名服务器解析域名

4.       代理服务器发送请求到测试服务器上,并且将响应内容返回给客户端

 

具体尝试性实施方案如下(在XX项目过程中有成功案例)

1.       利用squid搭建代理服务器 (代理地址: 10.20.131.207:3128)

备注:

Squid配置介绍见附录I

 

2.       浏览器配置代理

全局代理: 代理服务器上,直接填写 10.20.131.207 3128

局部代理: 通过pac实现,选择”使用自动配置脚本”,脚本格式内容如下:



备注:

Pac脚本详细介绍见附录II

为了防止将配置工作带给PD,销售等,我们可以使用配置好的绿色浏览器提供直接使用.

推荐一款:GreenBrowser: http://www.morequick.com/indexen.htm

 

IE具体配置,见下图:



Firefox同样支持代理和pac脚本

Chrome需要安装proxy switchy插件来支持.

 

改进方案思路

上述的方案中,有两个比较大的缺陷

1.       代理服务器没有多实例概念

代理服务器通过hosts绑定.hosts是全局性的,意味着一台代理服务器只能服务一组需求.而事实上,我们不同的项目需要的绑定都是不一样的.

2.       特性化需求不能满足

绑定全在代理服务器上做了,客户端本地个性化需求无法支持

 

所以,我理想中整体架构是这样的,见图:


1.       优先查看本地hosts文件

2.       代理服务器支持多实例部署,不同实例有不同的hosts绑定配置.

 

目前具体实现方案,还在构思中.欢迎大家提供实现方案思路.

 

附录I

Squid权威指南(中文版): http://home.arcor.de/pangj/squid/chap01.html

附录II

Pac介绍:               http://en.wikipedia.org/wiki/Proxy_auto-config

Pac函数介绍:        http://findproxyforurl.com/pac_functions_explained.html

 

posted on 2011-05-23 19:41 stone2083 阅读(2334) 评论(1)  编辑  收藏 所属分类: python

Feedback

# re: Hosts绑定新思路之HTTP代理篇 2011-08-23 10:57 看书网

不错,谢谢分享,学习了!!!  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: