AHdark
一个多语种开发蒟蒻
AHdark Blog

腾讯云CDN 出现错误码423

在本博客搭建和初步运营中,经常在文章编辑器(Gutenburg)使用中报错423错误并影响正常使用,为此我展开了系统性研究和进行了工单咨询

腾讯云工单咨询

发现问题源于腾讯云CDN的一个配置选项:回源301/302跟随

根据腾讯云故障排查文档可得知:

状态码 423 是腾讯云 CDN 自定义状态码,CDN 检测到有回环请求时会报错 423。建议您检查以下几点:

  1. 检查 CDN 控制台 配置的源站,若您的源站也是腾讯云 CDN 加速域名,则可能会造成回环请求。
  2. 若您的源站配置了 HTTP 请求到 HTTP 301/302跳转,且 CDN 控制台开启了回源跟随301/302配置,可能会造成访问423,建议您关闭回源跟随301/302配置。注意:若您使用此方法,建议您开启 HTTPS 配置,强制跳转 HTTPS,且回源方式修改为协议跟随,否则会造成多次重定向,配置流程请参考 HTTPS 配置

问题排查

腾讯云 CDN 默认不缓存301/302状态码,当源站返回301/302请求后,CDN 节点默认会将响应返回给用户端,由用户端重定向到对应的资源进行访问。

通过开启回源跟随301/302配置,CDN 节点在回源时遭遇301/302时会主动跟随跳转,直至获取所需资源(最多可跟随3次),返回实际的资源给到用户端,用户端无需跳转。

示例

若域名www.example.com开启了回源跟随301/302配置:

用户 A 请求资源:http://www.example.com/1.jpg,在节点未命中缓存,则节点会请求源站获取所需资源,若源站返回的 HTTP Response 状态码为302,跳转指向地址为 http://www.example.com/2.jpg,则:

  1. 开启回源跟随301/302配置后,节点收到状态码为301/302的 HTTP Response 后,会直接向跳转指向的地址发起请求。
  2. 获取到所需资源后,缓存至节点,并返回给用户。
  3. 此时用户 B 也向http://www.example.com/1.jpg发起请求,则会在节点直接命中并返回给用户。
  4. 开启回源跟随301/302配置后,最多仅跟随3次跳转,超出限制则会直接返回301/302给客户。

若域名www.example.com未开启回源跟随301/302配置:

用户 A 请求资源:http://www.example.com/1.jpg,在节点未命中缓存,则节点会请求源站获取所需资源,若源站返回的 HTTP Response 状态码为301/302,跳转指向地址为http://cdn.example.com/1.jpg,则:

  1. 节点将该 HTTP Response 直接返回给用户。
  2. 用户向http://cdn.example.com/1.jpg发起请求,若该域名未接入 CDN,则不会有加速效果。
  3. 若此时用户 B 也向http://www.example.com/1.jpg 发起请求,则会重复上述流程。

了解问题所在

Wordpress的一些接口在请求后会返回一个302请求,再次访问返回的新地址才能完成功能,因此其本不该缓存。而回源跟随会缓存其302信息,不论请求信息内容为何都会跳转到同一链接,因此其前后链接对应不同,由此返回错误。错误导致回环,因此腾讯云报错423

例1

请求http://www.example.com/api.php?uploadid=1会将你访问的uploadid计入数据库并返回302请求至http://www.example.com/upload.php?id=1,当你访问此链接时才会正常进行上传

而回源跟随会直接对你返回http://www.example.com/upload.php?id=1,前后参数/Cookie不同,服务端报错,因此产生回环

例2

请求http://www.example.com/api.php?uploadid=1会将你访问的uploadid计入数据库并返回302请求至http://www.example.com/upload.php?id=1,当你访问此链接时才会正常进行上传

当你再次访问http://www.example.com/api.php?uploadid=2,服务端本会返回http://www.example.com/upload.php?id=2,但CDN缓存了上次的302结果并对你返回了http://www.example.com/upload.php?id=1,此时前后访问id不同导致出错

根据腾讯云故障优先级

CDN 默认策略:当用户源站出现异常时,用户侧访问到达的 CDN 节点若缓存仍未到期,则根据节点缓存直接响应内容给客户。若到达的 CDN 节点缓存已被淘汰,则会发起回源请求,无法进行响应。

CDN会返回一个错误请求,而此请求无法将文件上传至服务器,因此会引发接下来的连续错误

根进

根据官方页面描述推测,如果开启这两项设置会降低回源次数,使得用户访问时都从距离自己最近的CDN节点抓取数据,就相当于提高了CDN命中率,进而提高用户体验度,访问速度更快

但某些接口为“一次性接口”,进而导致产生连续报错

最终结果

Wordpress网站不要开此选项,此选项并无太大优化作用。如有问题可提交腾讯云工单处理

参考信息

赞赏
本文链接:https://ahdark.com/som/525.shtml
本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可
欢迎加入Q群交流:654022768

AH Dark

文章作者

本博客的运营者、主要开发者、主要作者 深度学习算法工程师,后端工程师,嵌入式软件开发工程师 Azure认证 运维工程师

发表评论

textsms
account_circle
email

AHdark Blog

腾讯云CDN 出现错误码423
在本博客搭建和初步运营中,经常在文章编辑器(Gutenburg)使用中报错423错误并影响正常使用,为此我展开了系统性研究和进行了工单咨询 腾讯云工单咨询 发现问题源于腾讯云CDN的一…
扫描二维码继续阅读
2021-07-01