2023年的铁人赛已经正式落幕,在铁人赛的第一天我曾经分享过使用CDN的优势是什么。今天想来谈谈CDN背后的运作原理。而说到CDN就不得不说到反向代理,那什么是反向代理呢?
维基百科这样说:
反向代理(Reverse proxy)在电脑网路中是代理伺服器的一种。伺服器根据客户端的请求,从其关联的一组或多组后端伺服器(如Web伺服器)上取得资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP位址,而不知道在代理伺服器后面的伺服器丛集的存在。
这些文字对于有底子的工程师来说可以无痛阅读,但回想当初刚转职科技业的我看了三天三夜…依然没明白它在说什么。所以为了更好的去消化理解,我只好带入一些生活化的例子来帮助记忆什么是反向代理,而正向代理又是什么?
简单来说,提出需求的那方称为客户端
而真正回应需求的叫做伺服器端
所以当我用手机在浏览器上面搜寻资料时,我的手机就变成了客户端,而网路会根据我搜寻的资料找到提供资源的伺服器端,然后伺服器端会回应我的需求。
正向代理(Forward Proxy)
这边的代理指的是代理伺服器,用个浅显易懂的例子来说就是帮我们跑腿的代办人。
假设我在开发部门,我朋友和我心仪对象同在业务部。
办公室的座位如下:
我 | 朋友 | 心仪对象
我比较害羞,想要写情书给心仪对象但是又不想要被他知道是我写的,于是我将情书拿给朋友,朋友再传给心仪对象,朋友代理了我传递讯息,朋友就是正向代理。然后心仪对象以为情书是朋友写的所以爱上朋友,徒留我一身伤悲...
正向代理的用途:
1. 突破因距离太远的沟通限制
我跟心仪对象距离太远不能直接进行沟通,但因为有正向代理所以能够突破限制跟他传递情书。
(用户想要访问某国外网站,但该网站有区域限制无法直接在国内访问,这时我们可以访问代理伺服器,通过代理伺服器转发请求。)
2. 隐藏客户端真实IP
心仪对象不会知道是谁写情书给他。
(伺服器不会知道用户的真实IP,只能知道正向代理伺服器的IP。)
3. 提升访问速度
朋友会模仿心仪对象的笔迹,如果我老是传一样的情书内容给心仪对象,且每次得到的答覆都是一样时,朋友就会直接模仿心仪对象的笔迹和口吻“你人真好”回覆给我,节省传给心仪对象和等待他回覆的时间。
(代理端会有缓存机制,如果需求回应已经存在于缓存中,代理伺服器将会直接回应给客户端。)
反向代理(Reverse Proxy)
假设身为租客的我在找房子,我以为接触到的是房东,但对方其实并非房东本人而是二房东,二房东帮助真正的房东处理租房事宜,二房东就是反向代理。然后真正的房东其实是可怕的张小姐。
客户端(租客)发送请求到反向代理伺服器(二房东),反向代理伺服器再把请求转发给伺服器(房东),再把执行结果返回给客户端(租客)。
反向代理的用途:
1. 隐藏伺服器真实IP
我不知道房东的真实身份。
(用户不会知道伺服器的IP,只能知道反向代理伺服器的IP。)
2. 负载均衡
二房东知道房东本人很忙,所以找房东的老公帮忙处理租房事宜。
(可以根据所有伺服器的负载情况,将客户端的请求分发到不同的伺服器上,避免单一伺服器的负载量过大。)
3. 资安控管
二房东可以保护房东的安全不被外部攻击。
(可以作为应用层防火墙,提供DDoS防护。)
4. 提升访问速度
二房东有房屋的相关资讯和钥匙,可以直接带租客去看房,而不必等待很忙的房东排出时间。
(反向代理伺服器可以缓存静态内容和加速动态内容,提高访问速度。)
正向代理与反向代理的差异?
简而言之,两者都能提高访问速度、两者都能保护真实的另一端。
差别在于:
希望这篇可以帮助一些看文件看到快崩溃的新手工程师。