CDN的一些思考

配置了一个CDN,却遇到很多问题,先是301,后来又是微服务的401。作为一个普通的网站怎么好意思出这么多问题呢?
先来好好了解CDN使用的一些逻辑。

CDN

先了解一下CDN所用到的几个基本概念:

  • 源站:源站决定了回源时请求到的具体IP地址
  • 回源HOST:回源HOST决定了回源请求访问到该IP地址上的具体站点。

回源HOST指CDN节点在回源过程中,在源站访问的站点域名。当您的源站有多个业务共用的情况时,可以通过用户回源请求里面携带的回源HOST来区分不同的业务。具体的例子就是A记录指向的服务器上有多个域名,如果不区分的话就会默认指向第一个,就会出现业务混乱的情况。

基本链路

使用cdn这类工具,其实即使服务器上不部署ssl证书都可以实现ssl访问,如果是半程加密以我的博客为例,访问过程如下:

https://www.xxx.com(浏览器) -> 阿里云cdn(进行校验证书是否有效)—回源–> 服务器(80端口)

可以看到这里回源的服务器的80端口,而非443端口,这就是半程加密。

所以为什么导致重定向次数过多的原因就知道了。

https://www.xxx.com -> 服务器80端口-> 触发rewrite规则 -> https://www.xxx.com 导致循环。

同样的不加密、全程加密、严格加密的意义就很容易理解了。

301的情况

源站开启了HTTP重定向至HTTPS的功能,并且CDN控制台上配置的回源端口为80。在这种情况下,由于CDN回源端口为80,客户端无论是通过HTTP还是HTTPS访问CDN加速域名时,CDN在回源的时候都是使用HTTP请求源站,此时会触发源站的HTTPS强制跳转逻辑,然后源站会要求CDN重新发送一个HTTPS的请求,但是CDN回源的时候仍然会发送HTTP回源请求,然后再进行跳转,以此类推,就会出现反复重定向问题,最终导致出现报错。

云现状

CDN https://www.xxx.com -> cname http://w1.xxx.com -> slb 80-> Nginx 9090 -> http://w1.xxx.com