何为反向代理服务器(有时也会被叫做XX网关)?
要了解这个问题,首先要了解何为代理服务器。所谓代理既代表用户于互联网打交道访问互联网资源的服务器,互联网是不知道代理后面到底有哪些用户的——他们被代表了!
反过来,反向代理服务器就是代表网络服务器(比如web服务器)跟用户打交道,向用户提供服务的服务器,用户是不知道反向代理后面实际上有哪些服务器的——他们同样被代表了!
何用之有?
用户使用代理服务器有十万个理由(共享网络,翻墙,隐藏个人信息等等。。。),反向代理服务器有什么理由存在于这个世界上呢?
我给你几个理由:
1.负责均衡器(反向代理+负载均衡算法)
当访问量很大的时候,需要服务器集群通过同一个入口提供服务的时候,反向代理+负载均衡算法+N个服务器就能完成简单的服务器集群的建设。这时反向代理的任务就是搜集请求,分派任务,返回相应。
常见相关产品有Nginx,HAProxy,apache+mod_proxy,lighttpd,Traffic Server。
2.加速服务器(反向代理+缓存)
有时候同样的资源会被请求无数次,如果这个请求每次都要重新算一下,无疑是个浪费时间的举动(比如有人不断问你1234*5678等于多少,如果你每次都拿起笔算一遍然后告诉他结果。。。),这部分时间可以省下来,这时通过反向代理加上缓存就可以实现这个功能,将重复的请求缓存起来,下次不经服务器直接返回给用户。
常见相关产品有:Nginx!Squid,Varnish,Traffic Server。
3.应用网关(反向代理+协议转换)
如果由于总总原因客户知道的协议与真实服务器的协议接口不一样(比如在http外加上ssl,或者换个地址端口等),我们就可以用反向代理加上协议转换来完成。反向代理与用户是一套协议,与服务器又是另一套协议。
常见相关产品有:Stunnel(ssl反向代理)。
4.安全网关/应用防火墙(反向代理+访问控制)
如果你想在你的服务对象上做些限制(比如封掉某个ip对某个特定资源的访问,或者限制部分用户的访问次数,阻断恶意用户等等),我们可以在反向代理上做些分析,对于符合特征的请求加上限制使得请求达不到服务器你就可以回家安心睡觉了。
常见相关产品有:novell access manager,mcafee web gateway。都是要$的。开源的有IronBee(开发中),mod_security勉强算吧。