目录

    解决网站 CDN 加速后有时候会出现重定向次数过多的错误


    解决网站 CDN 加速后有时候会出现重定向次数过多的错误

    问题描述

    事情是这样的,自己用 SpringBoot + SpringSecurity 做了一个博客网站,然后通过又拍云的 CDN 做了加速。但是发现访问网站时会偶尔出现 重定向次数过多(ERR_TOO_MANY_REDIRECTS),导致无法访问网站,过了几十分钟可能又能访问了。但是直接通过 IP 访问源站,不走 CDN 时不会出现这个问题。

    ERR_TOO_MANY_REDIRECTS

    这个问题我冥思苦想、看源代码、看又拍云 CDN 配置,花了好多天时间还是没解决,最后没办法了,找了又拍云在线客服,终于解决了,不得不佩服又拍云客服解决问题的能力和速度啊👍👍👍!

    问题原因

    网站通过 SpringSecurity 对部分路径做了权限控制,因此对 Session 进行了管理,源站 Session 因为超时自动销毁后,客户端再请求就会被重定向从而再次请求来重新产生一个新的 Session。因此一旦 Session 超时,则源站会发生一次重定向,然后又拍云 CDN 缓存了重定向后的路径资源。所以就会导致客户端和 CDN 之间一直反复重定向,直至 ERR_TOO_MANY_REDIRECTS。

    其实这个原因我也想到过,因为我观察源站打印的日志,在反复重定向的过程中,请求并没有进入源站,而且直接通过 IP 访问源站在 Session 因为超时自动销毁的情况下也只会重定向一次,所以问题一定出在 CDN 配置上面。

    CDN缓存请求资源20分钟

    由上图可以看出,缓存时长为 20 分钟,所以偶尔出现重定向次数过多就解释得通了,缓存过期了就会回源请求到源站,假如这时候源站 Session 没过期,那请求就正常了。

    解决方案

    在又拍云 CDN 功能配置的缓存控制菜单下配置缓存规则,对于不缓存的路径,要设置 301 和 302 状态码,保证重定向不缓存。

    总览——>CDN——>配置——>缓存控制——>缓存规则——>管理——>添加不缓存规则

    又拍云CDN缓存配置

    又拍云CDN添加不缓存规则

    又拍云CDN添加不缓存规则

    记得一定要添加状态码,因为默认情况下返回状态码 301 和 302 是会缓存的,我就是百密一疏,没有添加状态码,才折腾了这么久😂。

    end
  1. 作者: 锋哥 (联系作者)
  2. 发表时间: 2024-01-08 09:50
  3. 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  4. 转载声明:如果是转载博主转载的文章,请附上原文链接
  5. 公众号转载:请在文末添加作者公众号二维码(公众号二维码见右边,欢迎关注)
  6. 评论

    站长头像 知录

    你一句春不晚,我就到了真江南!

    文章0
    浏览0

    文章分类

    标签云