这里是普通文章模块栏目内容页
反向代理简介----服务器的代理

反向代理简介----服务器的代理

代理服务器是使用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使 内部网主机免受外部网主机的攻击。但是,如果想让互联网上的主机访问内部网的主机资源(例如:Web站点),又想使内部网主机免受外部网主机攻击,一般的 代理服务是不能实现的,需要使用反向代理来实现。
  本文将详细介绍反向代理服务的概念以及如何利用反向代理服务器提高WEB服务器的性能和安全性。
  一.反向代理的概念
  什么是反向代理呢?其实,反向代理也就是通常所说的WEB服务器加速,它是一种通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB缓冲服务器(即:WEB反向代理服务器)来降低实际的WEB服务器的负载。典型的结构如下图所示:

  Web服务器加速(反向代理)是针对Web服务器提供加速功能的。它作为代理Cache,但并不针对浏 览器用户,而针对一台或多台特定Web服务器(这也是反向代理名称的由来)。实施反向代理(如上图所示),只要将Reverse Proxy Cache设备放置在一台或多台Web服务器前端即可。当互联网用户访问某个WEB服务器时,通过DNS服务器解析后的IP地址是Reverse Proxy Server的IP地址,而非原始Web服务器的IP地址,这时Reverse Proxy Server设备充当Web服务器,浏览器可以与它连接,无需再直接与Web服务器相连。因此,大量Web服务工作量被卸载到反向代理服务上。不但能够防 止外部网主机直接和web服务器直接通信带来的安全隐患,而且能够很大程度上减轻web服务器的负担,提高访问速度。
  二.      反向代理和其它代理的比较
  下面将对几种典型的代理服务作一个简单的比较。在网络上常见的代理服务器有三种:
  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服务器的负载。
  三.反向代理工作原理
  反向代理服务器位于本地WEB服务器和Internet之间,如下图所示:

  当用户浏览器发出一个HTTP请求时,通过域名解析将请求定向到反向代理服务器(如果要实现多个WEB 服务器的反向代理,需要将多个WEB服务器的域名都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据(比如html网 页和图片等),而一些CGI脚本程序或者ASP之类的程序不缓存。它根据从WEB服务器返回的HTTP头标记来缓冲静态页面。有四个最重要HTTP头标 记:

  • Last-Modified: 告诉反向代理页面什么时间被修改
  • Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
  • Cache-Control: 告诉反向代理页面是否应该被缓冲
  • Pragma: 告诉反向代理页面是否应该被缓冲.
例如:在默认情况下,ASP页面返回” Cache-control: private.” ,所以ASP页面时不会在反向代理服务器缓存的
 
 
     反向代理服务器(Reverse Proxy Server)一般被置于源服务器的前端,如图中所示。它配备有大容量的内存和高速磁盘,用于缓存客户的请求,所以反向代理服务器又称为加速服务器。
                       

图:反向代理服务器
    对于客户送过来的请求,反向代理服务器的工作方式如下:
·            使用反向代理服务器后,客户端送过来的请求会首先送到反向代理服务器。
·            反向代理服务器先查自己缓存的内容(动态内容或静态内容)。
·            如果客户请求内容在缓存中,则直接将结果反馈给客户,此次请求完成。
·            如果客户请求内容不在缓存中,它会根据后面的各个HTTP服务器(或内容服务器)的运行情况,做负载均衡处理,将请求进一步送到某个http 服务器(或内容服务器)。
·            后端服务器作处理后,反馈结果给反向代理服务器。
·            对于后端服务器反馈过来的结果,它会将结果缓存(动态内容或静态内容)起来,并进一步送给客户端,此次请求完成。
    反向代理服务器通常要为一个请求同时维护两个会话:与客户端的会话和与后端服务器的对话。和普通的代理不同,反向代理服务器一般只代理一台或者有限的几台服务器,对于客户而言,反向代理服务器对于他们就相当于源服务器,对于源服务器而言,反向代理服务器通常就是唯一的客户,因为一般客户不和源服务器直接通信。典型情况下,源服务器对于客户或者客户对于源服务器,都是不可见的。
反向代理服务器的作用
    代理服务器起着客户机中继站的作用。它转发请求并接收响应,这使它成为高速缓存结果以便重用的理想场所。这类代理服务器称为高速缓存代理,它具有以下作用:
·            加快对客户的响应时间,减轻后端源服务器(即内容服务器)负载
    使用反向代理服务器后,由于它具有大容量缓存,可以缓存多个静态/动态页面,当有客户请求送过来时,如能够直接在缓存中找到请求结果,就可以直接反馈给客户,而不用再将请求送给后端服务器。这样就加快了对客户的响应时间,同时也减轻了后端源服务器的负载。
·            保障后端源服务器(即内容服务器)的安全
    对Internet上的客户端而言,它只能接触到反向代理服务器,因此反向代理服务器就成为后端服务器的屏障,保障了后端服务器的安全。
·            减少源服务器(即内容服务器)节点之间占用的网络带宽
    使用反向代理服务器后,它具有的大容量缓存可以减少源服务器的网络通讯量。这样就减少源服务器(即内容服务器)节点之间占用的网络带宽。
·            对源服务器进行负载均衡(Load Balance)。
    当后端源服务器有多个时,反向代理服务器可以根据后端各个服务器当前负载情况,做负载均衡处理,有选择的将当前请求送给最空闲的后端服务器。