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
浙公网安备 33010602011771号