凤凰架构:构建可靠的大型分布式系统
上QQ阅读APP看书,第一时间看更新

4.4.3 CDN应用

CDN最初是为了快速分发静态资源而设计的,但今天的CDN所能做的事情已经远远超越了最初的目标,限于这部分应用太多,无法展开逐一细说,笔者只能对现在CDN可以做的事情简要列举,以便读者有个总体认知。

·加速静态资源分发:这是CDN的本职工作。

·安全防御:CDN在广义上可以视作网站的堡垒机,源站只对CDN提供服务,由CDN来对外界其他用户提供服务,这样恶意攻击者就不容易直接威胁源站。CDN对某些攻击手段的防御,如对DDoS攻击的防御尤其有效。但需注意,将安全都寄托在CDN上本身是不安全的,一旦源站真实IP被泄漏,就会面临很高的风险。

·协议升级:不少CDN提供商都同时对接(代售CA的)SSL证书服务,可以实现源站是基于HTTP协议的,而对外开放的网站是基于HTTPS的。同理,可以实现源站到CDN是HTTP/1.x协议,CDN提供的外部服务是HTTP/2或HTTP/3协议;实现源站是基于IPv4网络的,CDN提供的外部服务支持IPv6网络,等等。

·状态缓存:4.1节介绍客户端缓存时简要提到了状态缓存,而CDN不仅可以缓存源站的资源,还可以缓存源站的状态,譬如可以通过CDN缓存源站的301/302状态让客户端直接跳转,也可以通过CDN开启HSTS、通过CDN进行OCSP装订加速SSL证书访问,等等。有一些情况下甚至可以配置CDN对任意状态码(譬如404)进行一定时间的缓存,以减轻源站压力,但这个操作应当慎重,且在网站状态发生改变时要及时刷新缓存。

·修改资源:CDN可以在返回资源给用户的时候修改资源的任何内容,以实现不同的目的。譬如,可以对源站未压缩的资源自动压缩并修改Content-Encoding,以节省用户的网络带宽消耗,可以对源站未启用客户端缓存的内容加上缓存Header,自动启用客户端缓存,可以修改CORS的相关Header,为源站不支持跨域的资源提供跨域能力,等等。

·访问控制:CDN可以实现IP黑/白名单功能,如根据不同的来访IP提供不同的响应结果,根据IP的访问流量来实现QoS控制,根据HTTP的Referer来实现防盗链,等等。

·注入功能:CDN可以在不修改源站代码的前提下,为源站注入各种功能。图4-7所示是国际CDN巨头CloudFlare提供的Google Analytics、PACE、Hardenize等第三方应用,这些原本需要在源站中注入代码的应用,在有CDN参与的情况下均能做到无须修改源站任何代码即可使用。

图4-7 CloudFlare[1]提供的第三方应用

[1] https://www.cloudflare.com/。