什么是正向代理?
顾名思义,代理这个词想必小伙伴们都会理解,就是“代你管理”,即一方委托另一方。那么我们在计算机网络世界里需要委托什么呢?看下面这张图:
在计算机网络的世界中,往往会存在客户端无法直接访问目标服务器,这个时候呢,就需要一个代理服务器来帮你跟目标服务器交互,也就是委托代理服务器帮你干活,然后把结果返回给你。而目标服务器在跟代理服务器交互的时候,是不知道哪个客户端发送的请求的。
举个栗子:假如你看张三很不爽,又近不了张三的身,打不过;这时候就需要一个代理人去帮你做这件事,当然代理人跟你说好了不暴露你;隔天代理人跑过来跟你讲,张三已经被揍一顿了,并挑衅说要报仇。而站在张三的角度看,被代理人揍了一顿,正常反馈给了代理人,喊着要报仇。
当然这个例子举的不算特别好,不过也是差不多的原理,张三被揍了,只知道代理人揍得,不知道背后的谋划者是谁;而背后的谋划者也得到了自己想要的结果,近不了身却揍了一顿张三。
总结下正向代理的作用:访问本机无法访问的服务器、加速访问服务器B、Cache作用、客户端访问授权、隐藏访问者的行踪等。
什么是反向代理?
我们来继续看一张图:
很显然这回被隐藏的是目标服务器,客户端通过网络向服务器发送请求,这时候服务器直接返回了。为什么呢?因为客户端并不知道所访问的服务器是代理服务器,也就是说,目标服务器委托代理服务器干活,这个时候客户端是不知道目标服务器是哪个。
同样举个栗子:假如还是你看张三不爽,想揍他一顿,这时候你近得了身了,当天就把一个长得像张三的人揍了,这个人还是一样挑衅的说要报仇。我们来到真正的张三角度看,原来那个被揍的是张三的双胞胎弟弟。
我认为张三被我揍了,结果张三没被揍,他的双胞胎弟弟被我揍了,可是我不知道啊,我也得到了“张三”的反馈。
总结下反向代理的作用:集群部署的负载均衡、前端服务器、nginx等。
虽然这两种代理方式名字相似,但目的及应用场景却不一样。
从功能来看:
正向代理是客户端无法(不能)直接访问服务端的解决方案
反向代理是多个服务端统一对外提供服务的解决方案
从目标客户角度看:
正向代理的委托方是客户端,代理向客户端(单次是1个)提供服务
反向代理的委托方是服务端,代理向多个(通常是多个,也可以单个)服务端提供服务
从客户端可见性的角度来看:
正向代理对客户端可见,是客户端主动选择的结果,客户端可以选择直接访问(是否能访问得到是另一回事),也可以选择通过代理访问
反向代理对客户端不可见,是客户端被动选择的结果(是服务端主动选择的结果),客户端是不知道目前访问的服务是否使用了反向代理的
当然了,这两种情况也可以结合起来一起用。