从传统意义上讲,Proxy Server即代理服务器是指位于用户计算机网络与互联网之间的服务器,其功能就是代理网络用户去取得网络信息,可以把它理解为网络信息的中转站。如果WEB浏览器配置为使用代理服务器的话,所有的请求都只会通过代理转发,代理服务器会按照用户的要求向站点发出访问请求,并针对各种应用依次采用不同的过滤规则。
“透明代理服务器”指的是在客户端完全不知晓的情况下,对代理服务器进行配置,使其可以处理用户请求。其缺点是代理服务器不支持SSL,但是用户浏览器不需要对普通HTTP通信(即明文HTTP通信)配置,很多情况下,它与高速缓存代理服务器一起使用,代理服务器从其高速缓存中访问图片和其它文件,而无需每次都占用互联网带宽从web服务器上获取。
反向代理服务器(Reverse Proxy Server),通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB缓冲服务器来降低实际的WEB服务器的负载,提高对WEB页面的访问速度。反向代理服务器位于用户WEB服务器和互联网之间。当一个HTTP连接进入时,反向代理服务器会决定所执行的操作,然后向后端的WEB服务器发出请求。反向代理服务器相当重要,它们常常肩负多种任务。
反向代理服务器可以是一个SSL终结器。这意味着SSL授权证书及其密钥都被装在代理服务器上,连同这些站点的对应IP地址。SSL因此被终止在代理服务器,而且对后端服务器的请求将会以纯文本的形式传送。这在通常情况下确实不错,但如果你的终端网络是不安全的,网络骗术可通过安全通道获取所需要的服务请求。
在这儿我们要探讨一下虚拟主机和SSL。虚拟主机的概念是基于站点名称的,在连接HTTP报头数据方面起作用。当发出了HTTP请求后,支持虚拟主机的WEB服务器会为不同的内容服务,这些内容是基于被请求站点的。本质上讲,这意味着你可以将多个域名指向一个相同的IP地址。如果启用了SSL,必须与特定的IP地址相结合,而且SSL授权证书必须与站点的名称相匹配,此站点正是用户试图访问的站点。SSL对话在HTTP数据发送之前进行,因而服务器只有一个选择,即一个授权证书呈现一个IP地址。如果在一个SSL连接建立之后,却发现请求的URL属于另一个站点,WEB浏览器会通知用户。如果它不如此工作,SSL就毫无意义了。
一个代理服务器也可以是一个负载平衡器。负载平衡从其基本意义上讲,其工作方式不外乎两种,实际工作时可以某一种方式运行。第一种工作方式即智能地在IP层循环访问一组服务器,第二种方式通过使用代理服务器来做一些更加智能的工作。一组服务器可以使用DNS轮询为站点服务。多个DNS记录可以配送给一个主机名,因此连接就会从这一组服务器中选择一个。当然,这对于使用SSL站点进行管理真是一种痛苦。路由器也可以以相似的方式实现负载平衡,这就要求保存现有的状态从而使后续的请求可以被传送到适当的服务器。不过,如此运作的大多数设备都只是充当一个代理服务器。使用代理服务器实现负载平衡很有意义,特别是在考虑了它所提供的其它特性以后。
反向代理服务器可以充当一种WEB服务器的应用层防火墙。实际上,它包含两个方面:进入的请求受到代理服务器中所配置的规则和策略的制约,而WEB服务器被封闭起来,与外部世界隔离,从而有效地抵消了跨站点的脚本攻击。
反向代理服务器还经常担当内容过滤器的职责,虽然过滤与防火墙息息相关,但反向代理却拥有更佳的性能。大多数代理服务器厂商实施一种阻止某些关键字或内容类型的机制。这可以是防止恶意代码攻击真实服务器的另一个层次。
前端代理服务器可以执行的大量任务也可以被反向代理服务器完成。一台高速缓存服务器,如squid,可以在多种配置中与反向代理服务器协同工作。如果反向代理服务器不支持高速缓存,很多站点会选择通过一个高速缓存代理来配置对后端服务器的访问,这样图像和其它静态内容就不必从真实服务器中检索。许多反向代理服务器也可以将一些特定的任务,如图片出租给一个完全独立的服务器。这些代理服务器通常被称为“WEB加速器”。
有许多代理服务器产品能够以反向代理服务器模式运行,在此我们只关注几个免费的开源产品。Apache2.2现在伴随着模块代理服务平衡器一起使用。Apache依靠模块代理支持反向代理服务器已有很长时间了,但是通过使用平衡器模块,Apache可以实现更加复杂和更有弹性的配置。当然,配置并非十分简单,Apache本身资源密集而且对内存要求很高。
Pound是一个反向代理服务器及负载平衡器,可以终止SSL连接。配置相当简易,它与Apache相比的极大优势在于它经过精心编制、小巧灵活。许多Pound用户给出了其相当惊人的吞吐量统计,当然它也一直是可靠有效的。