从两个图的拓扑结构看,似乎正好相反,这正是两个名称的来源。一个代理客户端,一个代理服务端。
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 的管理员担心服务器上托管的内容会遭到报复,不希望直接将主服务器对外公开。
- 像“加拿大药房”这样的垃圾邮件似乎拥有数千台服务器,而实际上大多数网站的服务器数量要少得多。此外,对垃圾邮件的滥用投诉只会关闭公共服务器,而不是主服务器。