大家在开发中进行需要使用到Nginx来实现反向代理,而对于正向代理和反向代理的理解,很多开发者还是模模糊糊,难以奇说其中的区别。尤其是在面试的时候,当面试官问道这个问题的时候,大部分初中级的开发者的回答都很难令面试官满意,所以今天我就写这偏文章,来为大家解说其中的思维。
1.正向代理
字面解释:
正向代理方式是指以客户端访问internet上的连接请求时,并不直接访问internet网站,而是先去访问指定的代理服务器,代理服务器接收请求后,然后将请求转发给需要访问的真实服务器,并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个正向代理服务器。
应用场景:蓝灯翻墙。
2.反向代理
字面解释:
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
两者的相同性:
从字面解释来看,其实无论是正向代理,还是反向代理,他们都有相同的逻辑性,都是有一个代理服务器实现了代理客户端的请求转发,如果从这个层面来解释,他们的本质是一样的。所以并不能说正向代理和反向代理是相反的,这个“正”和“反”,并不是我们生活中左右相反的那种逻辑。
两者的不同性:
上面已经解释了,正向代理和反向代理具有相同的流程和逻辑性,只是我们换一个角度,从面对对象的思维,或系统架构的角度去看待,他们就有明显的区别了。
a.面对对象的不同:
首先从面对对象来说,正向代理针对的对象和客户端,通俗来说,是客户端自我主动设置了代理,客户端很清楚自己要代理的服务器是谁,还有最终访问的真实服务器是谁;而反向代理针对的对象是服务端的内部服务器,这个反向代理服务器并不是客户端指定的,客户端也没法去指定谁做代理,并且客户端也无法知晓最终要访问的服务器是谁,因为一切由这个服务端内部的代理服务器做了请求分发处理,所以反向代理这种方式更安全,真实的服务器都隐藏在内部,而不对外暴露。可以说反向代理方式对客户端而言是被动的,客户端并没有主动的想要去做代理;而正向代理往往是客户端主动要去做代理。这个主动与被动的关系,就好似一个正反的关系,因此把内部服务器做请求转发的方式称之为反向代理。
b.系统架构的不同
从系统架构层面上来看,正向代理的客户端和正向代理服务器可以看成是一个容器,真实服务器是另一个容器;而反向代理的客户端是一个独立存在的容器,反向代理服务器和真实的服务器是处在同一个容器。也正是这种架构图看起来有点相反的缘由,所以有了反向代理的概念。
以上关于正向代理和反向代理的解释,你学会了吗?欢迎大家留言评论。