作者:拱卒
301/302跳转是网站业务常见的一种处理手段,把针对其他域名的访问重定向到主要承担业务的域名上。
但是如果使用CDN产品来对网站业务进行加速,有一些注意事项:
- 源站配置跳转的30X location url是否也通过CDN进行了加速
正常情况下CDN会针对30X记录的做缓存,如果跳转url的流量没有走CDN的话,那么这种情况下,本质上客户的业务是没有被加速的,CDN只是缓存了一个30X的跳转记录。在这种情况下,一般控制台上看到的流量也会比较低(下图是控制台截图)。
如某客户发现自己CDN控制台流量突然变低,经测试发现访问客户的CDN域名都跳转301了,如下图所示:
可以看到访问客户的CDN域名下的url A出现了301跳转到url B。然后发现客户的url B并未通过CDN加速,所以实际上客户的客户在访问客户的网站业务时,主要流量没有被CDN加速,所以控制台看到流量有所降低。而这个301跳转是客户新配置的,配置后就发现了流量问题。
这种现象也可以通过CDN控制台的http状态码来观察,如果发现很高比例的30X,那么需要关心一下30X的地址是否也被CDN加速了。
- CDN如何处理源站的302跳转
有关CDN对源站302的处理逻辑,可以参考官方文档
https://help.aliyun.com/knowledge_detail/40128.html?spm=5176.10695662.1996646101.searchclickresult.f22b3f46TfGxEp
值得注意的是以下内容和相应的解决方案:
在对网站部署CDN后由于CDN的产品性质,CDN会对用户的访问资源缓存到CDN的节点上以便后续可以加快用户的访问,这种情况下就可能会出现第一个用户访问后会对对应的302的请求进行缓存。而其他不同终端设备的用户通过该URL进行访问的时候就会出现访问到的页面情况仍然是第一个用户缓存的302的请求到的页面上。这就会造成用户源站设置的对不同终端的适配功能失效。
- CDN和SLB等产品配合使用时的30跳转问题
有些客户会发现如果CDN后面配置SLB,直接访问SLB的话,没有问题。但是开启CDN后,会出现跳转死循环的现象
一个可能的原因是:
- SLB开启了https和http的访问端口,然后在源站做了http->https的跳转。
- 然而CDN配置加速域名时,只配置了源站的80端口。
- 这样通过CDN的https访问,CDN会默认回源到源站(即SLB)的80端口。http协议访问SLB的80端口会最终返回给client(即CDN L2回源几点)一个30X跳转到https,CDN再将这个结果返回给真正的用户,就形成了一个死循环。
解决办法是开启CDN的跟随协议回源功能,这样https访问CDN会通过https协议回源到源站的443端口,就不会出现死循环的现象。感兴趣的朋友们可以搭建一个类似的链路进行一下测试。
谢谢大家