Proxy Server及Reverse Proxy Server的关系

原创文章,转载请指明出处并保留原文url地址

Proxy是网络上常用的一种软件,我们有时候上网要经常配置代理服务器,在几年前我们经常为找个好的代理费劲, 现在代理用的少了, 但是为了上一些特定的网站还是有代理才能上的。

Reverse Proxy反向代理服务器是一种常用的server端软件。

代理及反向代理他们有什么区别?

从本文开始我们面向程序开发者将分3次介绍代理服务器proxy server及反向代理服务器Reverse Proxy server相关工作过程。

本文简单介绍一下代理服务器及反向代理服务器的基本功能等,下一篇文章我们重点介绍一下代理服务器工作过程,数据是如何传输的,网络连接过程等。最后我们在介绍一下反向代理服务器工作过程及原理等。希望大家通过本文能了解代理服务器及反向代理服务器工作原理。

一.Proxy Server的基本工作过程

下图是一个有proxy server互联网示意图

image[13][1]

图中主要分为3个区域, 左侧是“被代理的内部区域”, 右侧是“服务器”区域,中间空白是互联网区域。

被代理内部的区域:一般是特定范围的逻辑区域, 比如一个企业, 一个机构, 一般这个区域内部相对安全

互联网:互联网数据区域中有各种服务器,各种资源, 各种人员等,有爬虫, 各种病毒,木马等等, 相对不安全

服务器:是具体的资源及服务提供商的服务器等, 提供具体的网络服务及页面。

如上图,代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。

更重要的是:Proxy Server(代理服务器)是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的会话层。主要的功能有:

1.突破自身IP访问限制,访问国外站点。教育网、过去的169网等网络用户可以通过代理访问国外网站。

2.访问一些单位或团体内部资源,如某大学FTP(前提是该代理地址在该资源 的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。

3.提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。

4.隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。

l 代理服务器基本工作过程

正常情况用户访问网络可以不经过代理服务器等, 但是互联网是个不安全的环境, 同时有的时候,有单位或者机构组织等为了进行一定的限制等,不允许用户的计算机直接访问互联网, 这样当用户有访问需求时, 就需要先连接 代理服务器,由代理服务器代替用户访问互联网, 然后代理服务器将服务器的相应返回给用户。详细情况如下:

1. 用户向代理服务器发起访问请求(一般这个过程用户是不可见的, 浏览器等自动处理了)

2. 代理接收用户请求,会首先检查本地是否有缓存, 若是有缓存是否有效, 若是有效则直接返回结果给用户

3. 代理服务器通过互联网发出请求到远程服务器

4. 远程服务器相应用户请求给代理服务器

5. 代理服务器接收请求 判断是否能缓存这个数据, 若是可以则缓存

6. 代理服务器将结果返回给用户浏览器等, 最后显示给用户。

l 代理服务器的几个需要注意的问题

1. 代理服务器可以隐藏用户的真实ip地址

2. 代理服务器如何将用户的ip地址发送给远程服务器

3. 如何确保缓存数据的有效性

4. 如何清理缓存

l 代理服务器方式下工作特点

1. 首先是用户主动发起请求到代理服务器,方向不可逆转

2. 用户不能直接访问外部网络,被代理服务器隔离

3. 代理服务器一般都具有缓存可以一定程度上提高效率

4. 代理服务器可以使外界不了解内部区域

5. 代理服务器可以有选则的透露用户的ip地址等信息

l 常见代理服务器

大家自己去搜索。。。。

l Server端的几个问题

Server端是用来提供给用户服务的资源或者网页,从上面图中我们server端仅仅提供了一台服务器进行相关工作,那么能否满足我们的需要?

Server端程序如何能清理掉代理服务器中的缓存?

Server端程序仅仅是一台服务器,若是服务器宕机了如何处理?

Server端程序负载能力如何?Web2.0时代后用户交互数据大量出现如何处理的?

Server端如何解决多个地点用户访问速度相差过多的问题?

本文后面部分先解答部分内容,其他情况我们慢慢解决。

二.Server端及反向代理服务器

l Server端服务器功能细化

针对web2.0后网站方面的交互的增加,server端以往的静态服务为主的方式已经不满足需要,一般server端都拆分成http服务器、应用服务器、数据库等,甚至更多层。

image[10][1]

应用服务器负责处理各种用户逻辑,接收用户的实际请求,解析请求

,根据业务特点处理数据,最后生成相应数据,返回给请求者(代理服务器或者用户)

数据库进行持久化存储。

这个程序结构充份发挥了各个系统模块的特点, 前面的web服务器负责接收用户请求,然后进行分发到后面服务器。同时处理静态资源等相关事项,应用服务器处理动态资源等。

l Server端服务器横向扩展

当系统容量工作负载进一步加大后,后端服务器将通过横向增加应用服务器的办法增加服务能力, 但http服务器能力也不够用后,也可以进行相应横向的增加等。

从上图,我们可以了解到,后端应用服务器会根据负载的情况从单台变成多台,同时提供给用户进行服务。

用户如何访问这么多台服务器,用户如何判断那台服务器出故障了,然后访问另外的服务器?

前面的http服务器需要提供一个自动的判断服务器状态的程序,他替用户判断后面应用服务器等状态, 负责将用户请求动态分发到多台应用服务器中去。

这个server端的辅助服务器及相应过程我们可以简称为反向代理服务器。

l Server端反向代理工作过程如下:

1. 接收用户请求(代表后端多台应用服务器中一台接收数据)

2. 将请求转化给后端应用服务器

3. 接收后端应用服务器的相应

4. 将相应转发给请求的发起人(用户或者代理服务器)

l 反向代理服务器的职责

1. 接收用户请求

2. 转发请求都后端

3. 检查后端服务器工作状况,将故障状态的服务器从代理列表中剥离出去

4. 将用用户状态信息(例如ip地址等)转发给后端

5. 接收后端数据,根据需要进行缓存处理

6. 发送相应给用户

7. 隔离用户同应用服务器, 用户无法了解到后端到底有多少服务器在提供服务

8. 保护server端应用服务器系统不被直接访问,简化安全等

三.小结Proxy Server、Reverse Proxy Server

前面介绍了Proxy Server及Reverse Proxy Server的一些概念,下面列举一个例子来简单总结一下两者的关系。

代理服务器, 就像 时下生意最红火的“火车票代售点”, 购票者到代售点去购票, 代售点服务员, 根据用户的要求代替用户去购票。用户在整个过程中被代理了。 请求的方向是用户主动请求购票, 然后服务员先接受用户的请求, 然后代表用户去执行一定操作, 最后将操作结果告诉用户。

反向代理服务器,就像大学里传达室老大爷,他会代替学生接受邮包,快递等等, 然后根据学生的状况等, 在学生宿舍有人的时候, 把邮包,快件等给学生送去。在整个过程中, 老大爷主动接收外界的请求, 然后主动给用户送去东西, 接受用户的相应, 在把相应告诉给对方(这个过程有点不太对, 邮递员不可能等这么长时间的,哈哈, 我们为了方便,就假设这个邮递员比较可爱会一直等吧。)

发表评论