18.正向代理和反向代理

正向代理和反向代理

简明解释

The word "proxy" describes someone or something acting on behalf of someone else.
Forward Proxy: Acting on behalf of a requestor (or service consumer).
Reverse Proxy: Acting on behalf of service/content producer.

  • 代理:事物A代表事物B执行某行为。
  • 正向代理:代表客户端,请求发起方执行某行为。
  • 反向代理:代表服务器,服务提供者执行某行为。

正向代理

正向代理代表客户端向服务器发起请求。

假设有三台电脑接入网络

  • X = 本机,或 "客户端"
  • Y = 正向代理,proxy.example.com
  • Z = 被访问的地址,服务器, www.example.com

通常情况下,客户端直接访问服务器X --> Z

然而在某些场景下,通过代理Y代表X访问服务器Z是更合理的选项,此时链路变成X --> Y --> Z

客户端X使用正向代理的几种原因

  • X不能直接访问Z
    因为
    • X所处网络的管理员屏蔽了所有对网站Z的访问
      • 防止用户感染病毒或上当受骗,管理员屏蔽有害网站、钓鱼网站
      • 防止员工在上班时间逛淘宝刷微博,管理员屏蔽大部分外网。
      • 防止未成年人上色情网站,中小学校禁止内网接入1024等网站。
      • GFW
    • Z网站的管理员屏蔽了客户端X的访问
      • Z的管理员发现X的举动对网站有危害,管理员屏蔽X的ip或整个网段
      • Z论坛屏蔽刷帖用户X,或者反爬虫等等。

反向代理

反向代理代表服务器响应客户端的请求。

假设有三台电脑接入网络

  • X = 本机,或 "客户端"
  • Y = 反向代理,proxy.example.com
  • Z = 被访问的地址,服务器, www.example.com

通常情况下,客户端直接访问服务器X --> Z

然而在某些场景下,通过服务器Z的管理员限制或禁止X直接访问,强制访问者通过Y访问。此时,链路同样变成X --> Y --> Z

  • 反向代理中,客户端X只知道自己与代理Y在通信,并不知道自己在访问Z

  • 代理Y对外可见的,服务器Z对外不可见的。

  • 反向代理不需要任何客户端配置。

  • X认为自己只对Y发起请求(X --> Y),实际上Y将所有的请求转发到Z(X --> Y --> Z)。

服务器Z使用反向代理的几种原因

  • Z希望让所有导向自己网站的流量先通过Y
    • Z的网站有用户数量巨大,单台服务器无法处理全部请求。因此Z部署多台服务器,同时使用反向代理。当用户访问Z网站时,反向代理将请求转发到离用户最近的服务器。这是CDN(Content Distribution Network)基本工作原理。
  • scalability、high concurrency、high availability、high performance
    • 通过代理Y隐藏服务器端的复杂实现

PS

  • 这其实是个很小的点,很早就接触到了,一直一知半解。知乎上的回答挺容易产生误解的,倒是有个回复挺简洁明了“你用你的电脑访问我的网站,但你不知道我有没有使用nginx,而我也不知道你是不是挂着ss”。爆栈上的回答更加切中要点,讲得也很透彻,翻译一篇加深理解。
  • ref:Difference between proxy server and reverse proxy server

posted on 2017-03-11 13:12  Hanny_  阅读(413)  评论(0编辑  收藏  举报