什么是反向代理?正向代理和反向代理的区别是什么?

2021-05-24 10:25:00 浏览数 (1)

今天,有位同事问我反向代理怎样理解,说某度上解释正向代理和反向代理的区别看后似懂非懂,于是有了此文。

首先,从字面上理解,代理的意思是代替办理,就是一方委托另一方办事,在计算机网络的世界里,代理通常是指客户端与服务端之间的中介。

计算机网络中的代理又分为正向代理和反向代理,正向代理很简单,就是客户端不直接访问服务端,而是通过一个中间人访问(中间人先代替客户端向服务端获取到数据,再将获取到的数据返回给客户端),很容易理解吧,那很多人会问,为什么客户端要“脱了裤子放屁”,不直接访问服务端呢?通常有两种原因:

1.客户端所在网络限制访问服务端了;

2.服务端不允许某些来源的客户端访问;

举个粟子:A村子和B村子关系不好,所以A村设了限制,不允许A村民去B村小卖部买玉米,或者B村子小卖部不卖玉米给A村民。但A村民又想要B村子小卖部玉米,那怎么办呢?A村民可以委托C村子的人代替自己去B村子买东西,带回来后再交给自己,这就是正向代理。示意图如下:

图片来源:自己画的图片来源:自己画的

这种结构的特点是:服务端不知道自己的真正客户是谁,它接触的客户是代理,但客户是知道真正提供服务的是谁(是B小卖部而非代理),正向代理是客户端无法直接访问(或想匿名访问)服务端的解决方案,委托方是客户端!

而关于反向代理,很多人都觉得难以理解,因为正常的思维,既然正向代理是客户端向服务端获取数据的中介,那反向很自然就应该是服务端向客户端获取数据的中介了,然鹅事实并非如此,他们是有很大差别的,这是理解的难点。先来看一下下面这张图:

图片来源:自己画的图片来源:自己画的

B村有很多村民都生产玉米(假设生产的玉米是无差别的),但分别单独对外售卖玉米很麻烦,因为客户不知道哪家有,也不清楚哪家的量有多少,所以他们全部委托给B村小卖部销售(注意:委托方是服务端!),由小卖部统一对外服务。买玉米的客户不清楚玉米是哪家的,只管直接向小卖部购买就可以了,这就是反向代理。

这种结构的特点是:客户端不知道谁是真正的服务端(供应商),反向代理往往会根据一定的策略将请求转发到最合适的服务器处理,例如按服务器闲忙情况分配,咦,听起来是不是很像负载均衡的策略?没错,反向代理经常应用于实现负载均衡场景,Nginx等Web服务器支持反向代理功能并被广泛应用于实现负载均衡。

总的来说:所以虽然这两种代理方式名字相近,但目的及应用场景上天差地别:

  • 从功能来看: 正向代理是客户端不能(不便)直接访问服务端的解决方案 反向代理是多个服务端统一对外提供服务的解决方案
  • 从目标客户角度看 正向代理的委托方是客户端,代理向客户端(单次是1个)提供服务 反向代理的委托方是服务端,代理向多个(通常是多个,也可以单个)服务端提供服务
  • 从可见性的角度来看 正向代理对客户端可见,是客户端主动选择的结果(可选可不选,服务端只能被动选择),客户端可以选择直接访问(是否能访问得到是另一回事),也可以选择通过代理访问 反向代理对客户端不可见,是客户端被动选择的结果(是服务端主动选择的结果),意思是:客户端是不知道目前访问的服务是否使用了反向代理的

PS:有时候,这两种代理方式会在一次网络请求中并存,如下图所示:

图片来源:自己画的图片来源:自己画的

大家各司其职,是完全没有冲突的

小伙伴看懂了吗?

0 人点赞