当前位置:首页 > 知识

反向代理和正向代理的区别

反向代理和正向代理,代理名字只差一个字,和正干的向代事却完全相反。我拿饭馆吃饭打个比方,区别你立马就懂。代理

正向代理,和正你是向代食客,代理是区别帮你排队的外卖小哥。你想吃巷子深处那家不送外卖的代理卤煮,但你自己懒得跑,和正或者压根进不去(比如那店在小区里,向代保安不让进)。区别于是代理你让外卖小哥去,他替你排队、和正替你买、向代替你拎回来,你只管付钱吃。在这个过程里,卤煮店老板只认识外卖小哥,根本不知道你长啥样。这就是正向代理的核心——它站在你这边,替你去访问别人,隐藏的是你的身份。

现实里最典型的正向代理就是翻墙软件。你访问不了谷歌,不是因为谷歌不存在,而是路被堵了。你连上代理服务器,它替你访问谷歌,再把内容传回来。谷歌看到的是代理服务器的IP,不是你家的宽带IP。所以正向代理解决的是“我够不着,你帮我够”的问题,代理服务器和你在同一边,是“自己人”。

反向代理就完全拧过来了。这回你直接走进饭馆大厅,但你不直接面对后厨。你跟前台服务员点菜,服务员把单子递给后厨,厨师做好菜,服务员再端给你。你以为你是在跟厨师交流,其实你连厨师长什么样都没见过。服务员把所有后厨的复杂性全挡住了——哪个厨师今天休息、哪个灶台在修、哪个菜卖完了,你一概不知,你只跟服务员打交道。

网站服务器就是这个道理。你访问一个大型网站,比如淘宝,你敲完网址回车,请求先落到一台反向代理服务器上(比如Nginx)。这台服务器再决定把请求转给背后几百台真实服务器中的某一台。你根本不知道也不关心背后是哪台机器在响应你。反向代理站在服务器那边,隐藏的是服务器的真实情况。

所以核心区别一句话就能说透:正向代理隐藏客户端,反向代理隐藏服务端。正向代理是你主动去用的,反向代理是服务器那边偷偷装的。你手机里装代理软件,那是正向;你访问的网站前面架了层负载均衡,那是反向。

再举一个我工作中遇到的真实案例。我之前维护一个内部系统,公司员工在外网想访问,IT部门在机房放了一台正向代理服务器,员工先连这台机器,再跳转到内网系统。这时候内网系统看到的全是代理服务器的IP,员工真实IP被藏住了,这是为了安全审计。后来系统上线对外服务,用户量暴增,一台服务器扛不住,运维就在前面加了两台Nginx做反向代理,把用户请求轮流分给后面的三台应用服务器。用户完全无感,但背后已经天翻地覆。同一个“代理”词,两种用法,目的截然不同——一个是为了让员工“出得去”,一个是为了让用户“进得来”。

还有个容易混淆的细节。反向代理经常和负载均衡混着说,但负载均衡只是反向代理的一个功能。反向代理还能做缓存、做SSL加密、做请求过滤。正向代理也能做缓存,比如公司局域网里所有人访问同一个外部页面,代理服务器缓存一份,大家速度都快了。但正向代理更常被用来做访问控制——老板不想让你上班刷视频,就在代理服务器上把视频网站拉黑,你连代理都出不去。

用的时候别搞混。你要是想隐藏自己,找正向代理;你要是想保护自己的服务器,架反向代理。就这么简单。

分享到: