接入cdn以后访问https正常但访问http不正常

2021-11-09 10:24:58 浏览数 (1)

背景:

CDN的作用是加速,访问CDN链接和源站链接应该有一样的访问功能效果。 有的客户在使用的时会发现接入cdn以后和源站的访问效果不一样, 比如有的在使用cdn的时候发现网站接入cdn以后输入账号密码点登陆无反应,但直接访问源站是可以正常访问的。有的接入cdn以后有时候访问正常,有的访问不正常,但源站都正常。这种情况下一般客户第一反应是不是CDN出故障了? 那么是不是真的CDN出故障了呢, 实际上不尽然, 让我们一起剖析一下下面的案例, 看看这里的原理和问题的本质原因。

问题描述:

某客户反馈网站接入cdn以后有时候访问正常有时候访问不正常,但直接访问源站是可以正常访问的。

原因分析:

首先让我们快速理清楚这个问题现象。

1) 复现case,确认问题-》确定用户所报问题,发现规律

拿到cdn访问正常和不正常的链接,接入CDN后确实访问http有问题。这里我们可以看到,当访问 https://xxxcdn.colasun.com/helloworld 时,正常返回200.但访问http协议的时候 http://xxxcdn.colasun.com/helloworld 返回423 locked。用浏览器访问该http资源不能正常的显示页面。

2) 检查源站,查看网站是否可以正常登录-》源站功能正常,排除源站功能问题

绑定源站直接访问的时候可以看到无论是http协议还是https协议的,都能正常返回对应的图片。 用curl命令查看,返回的头部如下:

我们可以看到,访问源站的https正常返回200, 访问http的时候,有一个301跳转。

那么源站这个301跳转和之前cdn返回的423locked 有没有什么关系呢?423错误码的意思是CDN 检测到有回环请,哪里造成了回环请求呢? 让我们来看下客户的配置。

3) 检查客户回源配置

发现客户同时开启

协议跟随回源

回源跟随301/302

结合上面源站测试结果,源站是做了http到https的强制跳转,把整个访问流程用下图描述并分析,我们的问题原因就逐渐清晰:

a.HTTPS访问场景

当用户用Https访问时, 协议跟随回源会用https回源访问, 这时源站正常响应https,CDN收到以后正常返回客户的200,完成一次正常回源请求。

b. HTTP访问场景

当用户用Http访问时, 协议跟随回源会用http回源访问,这是源站发现是http请求,301强制跳转成https location给cdn, 但因【回源跟随301/302配置】不支持https方式、会继续以http方式回源站,整过程简化为:http->https->http, 因此造成回环请求,CDN检测到回环请求以后返回给客户端423

从上述分析可以看到, 正式由于源站设置了https强制调整的同时, 又设置了回源跟随301/302和协议跟随回源,才造成了接入cdn以后用户用https访问正常, 用http访问不正常。

解决方案

对于此case,如果源站设置了https强制跳转,可以通过如下2种方法解决:

方法1:关闭回源跟随301/302

方法2:开启https回源

小结

这里我们可以看到,CDN加速网站输入账号密码点登陆无反应这种类似的案例一般也可以先检查一下是否有类似的设置。如果接入CDN以后,出现访问不符合预期,但源站访问正常时,未必一定是CDN的故障。大家分析产品设计的原理, 看下使用方式是否正常或是否可以优化。

cdn

0 人点赞