在计算机网路中,反向代理是代理伺服器的一种。伺服器根据客户端的请求,从其关係的一组或多组后端伺服器(如Web伺服器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP位址,而不知道在代理伺服器后面的伺服器簇的存在[1]。
与前向代理不同,前向代理作为客户端的代理,将从网际网路上获取的资源返回给一个或多个的客户端,服务端(如Web伺服器)只知道代理的IP位址而不知道客户端的IP位址;而反向代理是作为伺服器端(如Web伺服器)的代理使用,而不是客户端。客户端藉由前向代理可以间接访问很多不同网际网路伺服器(簇)的资源,而反向代理是供很多客户端都通过它间接访问不同后端伺服器上的资源,而不需要知道这些后端伺服器的存在,而以为所有资源都来自于这个反向代理伺服器。
反向代理在现时的网际网路中并不少见,而另一些例子,像是CDN、SNI代理等,是反向代理结合DNS的一类延伸套用。
基本介绍
- 中文名:反向代理
- 外文名:Reverse Proxy
- 请求:客户端
- 受理:伺服器
工作方式
通常的代理伺服器,只用于代理内部网路对Internet的连线请求,客户机必须指定代理伺服器,并将本来要直接传送到Web伺服器上的http请求传送到代理伺服器中。由于外部网路上的主机并不会配置并使用这个代理伺服器,普通代理伺服器也被设计为在Internet上搜寻多个不确定的伺服器,而不是针对Internet上多个客户机的请求访问某一个固定的伺服器,因此普通的Web代理伺服器不支持外部对内部网路的访问请求。当一个代理伺服器能够代理外部网路上的主机,访问内部网路时,这种代理服务的方式称为反向代理服务。此时代理伺服器对外就表现为一个Web伺服器,外部网路就可以简单把它当作一个标準的Web伺服器而不需要特定的配置。不同之处在于,这个伺服器没有保存任何网页的真实数据,所有的静态网页或者CGI程式,都保存在内部的Web伺服器上。因此对反向代理伺服器的攻击并不会使得网页信息遭到破坏,这样就增强了Web伺服器的安全性。
反向代理方式和包过滤方式或普通代理方式并无冲突,因此可以在防火墙设备中同时使用这两种方式,其中反向代理用于外部网路访问内部网路时使用,正向代理或包过滤方式用于拒绝其他外部访问方式并提供内部网路对外部网路的访问能力。因此可以结合这些方式提供最佳的安全访问方式。
CDN
CDN的全称是Content Delivery Network,即内容分发网路。其基本思路是儘可能避开网际网路上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网路各处放置反向代理节点伺服器所构成的在现有的网际网路基础之上的一层智慧型虚拟网路,CDN系统能够实时地根据网路流量和各节点的连线、负载状况以及到用户的距离和回响时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网路拥挤的状况,提高用户访问网站的回响速度。
代理伺服器
如果您的内容伺服器具有必须保持安全的敏感信息,如信用卡号资料库,可在防火墙外部设定一个代理伺服器作为内容伺服器的替身。当外部客户机尝试访问内容伺服器时,会将其送到代理伺服器。实际内容位于内容伺服器上,在防火墙内部受到安全保护。代理伺服器位于防火墙外部,在外部客户机看来就像是内容伺服器。
当客户机向站点提出请求时,请求将转到代理伺服器。然后,代理伺服器通过防火墙中的特定通路,将客户机的请求传送到内容伺服器。内容伺服器再通过该通道将结果回传给代理伺服器。代理伺服器将检索到的信息传送给客户机,好像代理伺服器就是实际的内容伺服器(参见图1)。如果内容伺服器返回错误讯息,代理伺服器会先行截取该讯息并更改标头中列出的任何 URL,然后再将讯息传送给客户机。如此可防止外部客户机获取内部内容伺服器的重定向 URL。
这样,代理伺服器就在安全资料库和可能的恶意攻击之间提供了又一道屏障。与有权访问整个资料库的情况相对比,就算是侥倖攻击成功,作恶者充其量也仅限于访问单个事务中所涉及的信息。未经授权的用户无法访问到真正的内容伺服器,因为防火墙通路只允许代理伺服器有权进行访问。
图1 反向代理伺服器就像是真正的内容伺服器

图1
可以配置防火墙路由器,使其只允许特定连线埠上的特定伺服器(在本例中为其所分配连线埠上的代理伺服器)有权通过防火墙进行访问,而不允许其他任何机器进出。
安全反向代理 当代理伺服器与其他机器之间有一个或多个连线使用安全套接字层(SSL) 协定加密数据时,即会进行安全反向代理。
用途
安全反向代理有许多用途:
可以提供从防火墙外部代理伺服器到防火墙内部安全内容伺服器的加密连线。
可以允许客户机安全地连线到代理伺服器,从而有利于安全地传输信息(如信用卡号)。
安全反向代理会造成各安全连线因加密数据所涉及的系统开销而变慢。但是,由于 SSL 提供了高速快取机制,所以连线双方可以重複使用先前协商的安全参数,从而大大降低后续连线的系统开销。
配置方法
配置安全反向代理伺服器的方法有三种:
Secure client to proxy。如果未经授权的用户很少或根本没有机会访问代理伺服器与内容伺服器之间交换的信息,则此方案很有效(参见图2)。
图 2 客户机安全连线到代理伺服器

图2
Secure proxy to content server。如果客户机在防火墙外部而内容伺服器在防火墙内部,则此方案很有效。在此方案中,代理伺服器可以充当站点之间的安全通道(参见图3)
图 3 代理伺服器安全连线到内容伺服器

图3
Secure client to proxy and secure proxy to content server。如果需要保护伺服器、代理伺服器和客户机三者间所交换信息的安全,则此方案很有效。在此方案中,代理伺服器既可起到站点间安全通道的作用,又可增加客户机验证的安全性(参见图4)。
图 4 客户机安全连线到代理伺服器并且代理伺服器安全连线到内容伺服器

图4
有关如何设定上述每种配置的信息,参见设定反向代理伺服器。
除了 SSL 之外,代理伺服器还可以使用客户机验证,这种方法要求向代理伺服器提出请求的计算机提供证书(或标识表单)以核实其身份。
比较
下面将对几种典型的代理服务作一个简单的比较。在网路上常见的代理伺服器有三种:
1. 标準的代理缓冲伺服器
一个标準的代理缓冲服务被用于快取静态的网页(例如:html档案和图片档案等)到本地网路上的一台主机上(即代理伺服器)。当被快取的页面被第二次访问的时候,浏览器将直接从本地代理伺服器那里请求数据而不再向原web站点请求数据。这样就节省了宝贵的网路频宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理伺服器的IP位址和连线埠号。客户端上网时,每次都把请求送给代理伺服器处理,代理伺服器根据请求确定是否连线到远程web伺服器获取数据。如果在本地缓冲区有目标档案,则直接将档案传给用户即可。如果没有的话则先取回档案,先在本地保存一份缓冲,然后将档案发给客户端浏览器。
2. 透明代理缓冲伺服器
透明代理缓冲服务和标準代理伺服器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理伺服器的IP和连线埠)。透明代理伺服器阻断网路通信,并且过滤出访问外部的HTTP(80连线埠)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web伺服器发出请求,其余操作和标準的代理伺服器完全相同。对于Linux作业系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设定,所以,透明代理对于ISP(Internet伺服器提供商)特别有用。
3. 反向代理缓冲伺服器
反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB伺服器的负载。反向代理伺服器承担了对原始WEB伺服器的静态页面的请求,防止原始伺服器过载。它位于本地WEB伺服器和Internet之间,处理所有对WEB伺服器的请求,阻止了WEB伺服器和Internet的直接通信。如果网际网路用户请求的页面在代理伺服器上有缓冲的话,代理伺服器直接将缓冲内容传送给用户。如果没有缓冲则先向WEB伺服器发出请求,取回数据,本地快取后再传送给用户。这种方式通过降低了向WEB伺服器的请求数从而降低了WEB伺服器的负载。