通俗易懂讲正向/反向代理
如果要用一个现实的故事来比喻下正向代理和反向代理的区别,那国内春运买火车票就是一个很好的例子了。
快过年了,小明要回老家过年,他就去火车站买车票,一问前台小妹,小妹说,火车票已经出售完了。火车票不是刚刚开始出售吗?怎么就那么快出售完了?——太tm 多人买了,而且很多黄牛党也在抢买火车票。于是,小明就找到一个黄牛党电话,一问,他可以买到,但需要加价100元。小明就多给了100元给黄牛党,就这样他买到了一张火车票。
这个例子里面,小明就是一个客户端,黄牛就是一台正向代理,火车票就是客户端想访问的资源。
这种代理,一般都是客户端想访问服务端资源,但由于某些原因,客户端不直接访问该资源,于是通过一些特殊途径,去访问到了资源。
再来看买票问题,还是小明去买火车票,在没有黄牛党的情况下,小明去哪买火车票?火车票是铁路局发售的,那么小明去铁路局买票吗?如果一个城市的所有人,都去铁路局买票,那么不用坐车了,排队可能就排到老家那边了。小明到铁路局指定的代售点买票即可,比如各大火车站或者商业中心的销售点。这是小明通过销售点买到了火车票。
再看,小明就是一个客户端,铁路局是服务器,火车站旁有个小妹坐在那的售票点,就是一个反向代理了,售票点小妹(反向代理)把车票数据从服务器(铁路局数据库)获取回来,再出售给小明。
这种代理,一般就是后端不想用户访问服务器,而暴露给用户一个代理(反向代理),让用户去访问这个代理,由代理去访问真正的资源服务器后返回给用户。
故事讲完,再来图解说说。
1)正向代理
正向代理模式中,用户或许直接访问不了服务器(比如谷站),或者不想直接访问服务器(刻意隐藏自己行踪),就借用代理去访问。而对于服务器来说,代理也是一个“用户”,它把代理作为一个普通用户来看待而不知道代理其实是在中转数据而已。在铁路局看来,黄牛党也是一个普通人,会正常的把票出售给他,铁路局分不清刚刚买票的那个人是一个普通人还是一个黄牛。
2) 反向代理
(注:上图真正服务器可能存在多个,为了方便只画了一个)
反向代理模式,后端为了某些原因(比如故意隔离保护真正服务器、做负载均衡等),不想让用户直接访问服务器,而对外暴露一个(反向)代理服务器。用户只看到代理,而看不到服务器的,用户甚至不知道真正服务器存在,他就认为代理就是服务器了。比如,买火车票,去各地的售票点即可,跑去铁路局干什么?
对比上面两图,把用户-代理-服务器三个站队来看,正向代理模式中,代理服务器是站在用户这边的;而反向代理模式,代理是站在服务器那边的。
正向代理,隐藏了真正用户;反向代理,隐藏了真正服务器。
下面一张图片来自知乎,很形象说明了正向代理和反向代理的差异。
在实际的网络中,由于很多因素存在(如终端想隐藏自己,而服务端要做隐藏真实服务器或负载均衡),网络拓扑很可能是这个样子(或者更复杂几个等级):
(全文完)
(欢迎转载本站文章,但请注明作者和出处 云域 – Yuccn )
One thought on “通俗易懂讲正向/反向代理”
讲的很好,理解了