背景说明
使用天翼云CDN加速后,如用户请求的文件在节点已有缓存,则直接响应给用户;如用户请求的文件为首次访问,或文件过期,则CDN节点会回源站获取文件,缓存在节点并响应给用户。
正常情况下,用户请求CDN节点和直接访问源站,访问到的内容相同。本文主要介绍CDN节点和源站文件内容如果不一致时,可能的原因及解决方案。
详细内容
从天翼云CDN访问到的文件和直接回源结果如不一样,可从以下几方面着手进行分析:
1.CDN节点回源,会在用户请求基础上增加部分请求头,源站如对相应请求头有处理策略上的差异,可能会导致响应不同内容
用户请求至CDN节点后,CDN节点会在原始请求头基础上增加类似如下的请求头:
- Ctl-Src-Ip:128.xxx.xxx.xx;该请求头值为终端用户客户端ip,源站可基于该请求头识别终端用户ip并做统计。
- Via: http/1.1 fj-ningde5-xxx[aff7324a-97b3-46da-af21-ba85e1876868] (ApacheTrafficServer/xxx);该请求头值为请求进入CDN节点后经过的节点信息。
- Request-Id:9011f7a06787a0fd560cd724dd9989fb;该请求头值为对应请求的唯一ID。
- Ctl-Origin-Scheme: http;该请求头值为回源时使用的协议类型。
如果源站针对上述请求头有做特殊处理,例如,有Via时可能响应不同的值,则会导致CDN和源站响应不同内容。
解决方案:可尝试通过直接回源请求,并逐个新增携带上述请求头,对比是否与源站获取的内容一致,直到找到造成响应差异的对应请求头。此后,可通过调整源站设置,或在CDN节点配置去掉对应请求头来规避问题。目前,删除CDN内部请求头尚不支持自助,需要提交工单给天翼云客服人工处理。
2.源站不支持压缩,CDN节点开启压缩
如果源站不支持压缩,但CDN节点配置了压缩,此时客户端请求头如有携带:Accept-Encoding:gzip,deflate,则源站返回为非压缩文件,CDN节点返回为gzip压缩文件,此时会造成客户端访问到的文件内容不同。
解决方案:该情况为预期中的正常情况,无需处置。
3.CDN配置了多个源站,且AB源内容不同步
如果CDN配置了多个源站,例如源A和源B,其中A为主源,B为备源;而同个文件在源A和源B之间未进行同步,此时可能会导致CDN节点回A源获取并缓存的文件,与客户端直接回B源获取到的文件不一致。
解决方案:CDN的多个源站之间应保持数据同步,避免出现不一致的情况。
4.CDN节点回源被劫持
如果CDN节点回源使用的是http协议,则在回源过程中可能会被劫持,导致CDN节点缓存的内容与源站内容不一致。
解决方案:CDN节点回源调整为https协议,避免被劫持。
注意https回源的前提是客户源站有部署对应域名证书,否则可能会导致证书校验失败。