http://en.wikipedia.org/wiki/Reverse_proxy
Reverse Proxy(反向代理):
1. 它是一个Proxy:转发客户端的请求和服务端的响应
2. 为什么说Reverse? Forward Proxy一般是处在Client和Server之间,而Reverse Proxy则和Server放在一起,一般是同一个局域网内。比如apache httpd和tomcat就部署在一起。
作用:本质上来说,反向代理是一种“Indirection”。作为系统设计的核心理念之一,indirection可以起到很多种作用:
1. 安全:
a.屏蔽Server的特性. 如果黑客不知道server是tomcat还是php,就无法采取专门针对特定服务器类型的攻击。
b.防火墙。Client无法直接访问Server,无法直接进行攻击。
2. 性能:
a.一个Reverse Proxy下面可以挂多个Server,实现集群和load balancing.
b.http协议相关的Cache. Apache httpd就很擅长这一点。
c.压缩response (不过很多Server自己也可以做这种事)
d.替server分担一些请求,尤其是静态内容. httpd比tomcat处理静态内容的能力更高(原因不详)
3. 功能:可以干些URL重写之类的事情
4. 结构:对外提供唯一的服务入口,使proxy+多台server组成的系统在Internet上仍表现得像单台
a. 可以只用一个外部IP
b. 可以只用一个域名,一个SSL证书 (如果你的域名本身可以对应多个IP,也不需要reverse proxy帮忙)
两个最流行的反向代理:Apache Httpd V.S. nginx (念作engine x)
有人有个精辟的总结:Apache is like Microsoft Word, it has a million options but you only need six. Nginx does those six things, and it does five of them 50 times faster than Apache.
1.nginx功能精而少,配置简单
2.nginx要快的多。因为它不像httpd一样频繁启动新的系统进程或线程来处理新的请求。nginx只用一个或少数几个线程,以异步非阻塞的方式来处理所有请求。