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