正向代理与方向代理简单图解
从两个图的拓扑结构看,似乎正好相反,这正是两个名称的来源。一个代理客户端,一个代理服务端。

stackoverflow 的回答更详细:
https://stackoverflow.com/questions/224664/difference-between-proxy-server-and-reverse-proxy-server

下面是译文:

首先,“代理”一词指的是某人或某物代表某人行事。
在计算机领域,我们讨论的是代表另一台计算机的一台服务器。
出于可访问性的目的,我将把讨论限制在web代理上—然而,代理的概念并不局限于web站点。

正向代理

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

假设有三台电脑接入网络

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

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

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

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

1) X不能直接访问Z:

  • X 所处网络的管理员屏蔽了所有对网站Z的访问
  • 防止用户感染病毒或上当受骗,管理员屏蔽有害网站、钓鱼网站
  • 防止员工在上班时间逛淘宝刷微博,管理员屏蔽大部分外网
  • 防止未成年人上色情网站,中小学校禁止内网接入1024等网站

2) 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使用反向代理的几种原因

1) Z 希望让所有导向自己网站的流量先通过 Y

  • Z 的网站有用户数量巨大,单台服务器无法处理全部请求。因此 Z 部署多台服务器,同时使用反向代理。当用户访问 Z 网站时,反向代理将请求转发到离用户最近的服务器。这是CDN(Content Distribution Network)基本工作原理。

2) Z 的管理员担心服务器上托管的内容会遭到报复,不希望直接将主服务器对外公开。

  • 像“加拿大药房”这样的垃圾邮件似乎拥有数千台服务器,而实际上大多数网站的服务器数量要少得多。此外,对垃圾邮件的滥用投诉只会关闭公共服务器,而不是主服务器。

相关文章: