反向署理的基本概念

反向代理的基本概念http://en.wikipedia.org/wiki/Reverse_proxyReverse Proxy(反向代理):1. 它是一个Prox

反向代理的基本概念
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只用一个或少数几个线程,以异步非阻塞的方式来处理所有请求。