前言
博客站出现后台登录原地打转以及进行后台某些页面或操作展示登录的问题挺久了。
之前根本没想到是CDN的问题,以为是雷池WAF的拦截,但是设置了白名单后仍有问题,就归咎于我是自己把博客代码或配置搞坏了...直到前两天把CDN关掉了,这些问题突然消失了,我才知道这是CDN没配置好的问题。
之前也在typecho社区求助过,可能是问法有问题,只得到了一个英文回答,我按此排查后也未果..
现在博客的加载速度也是优化的比以前快了很多,控制台和网络请求也没有任何错误。
问题描述
没有控制台截图,不想再复刻问题了。
1. 登录成功后仍返回登录页(循环)
- 登录后台后页面刷新,又回到
/admin/登录界面。 - 网络面板可见登录
POST /index.php/action/login返回302跳转到/admin/。 - 浏览器未能持久化登录所需的
Set-Cookie,后续访问仍是未登录态。
2. 已登录,访问后台 plugins.php 却是登录页模板
- 访问
GET /admin/plugins.php得到 200,但页面内容是登录模板。 - 响应头出现
x-cache: HIT、x-swift-cachetime: 10800、age: 2700,说明该页在边缘被缓存并被直接命中返回。
3. 启用/禁用插件时被重定向回登录页
原因分析
回源 301/302 跟随开启
- CDN 在边缘节点“自行跟随”源站的 302 跳转,导致该响应中的
Set-Cookie未返回到浏览器。 - 浏览器拿不到登录 Cookie,自然会回到登录页,形成“登录 → 刷新 → 仍未登录”的循环。
- CDN 在边缘节点“自行跟随”源站的 302 跳转,导致该响应中的
后台页面被 CDN 缓存
- 未登录访问后台页返回的是登录模板;一旦被边缘缓存,后续即使已登录也可能命中该缓存,继续看到登录页。
正确的 CDN 配置(以阿里云 CDN 为例)
原则:后台与动态动作完全不缓存;只缓存静态资源与首页等可缓存页面;任何携带登录 Cookie 的请求都不要缓存。
1. 关闭回源 301/302 跟随
- 全局关闭“回源 301/302 跟随”。
2. 缓存规则清单(按优先级从高到低)
阿里云 CDN 为“权重数值越大优先级越高”,例如:99 > 90 > 10。
- [权重 99]
php→ 0 秒(不缓存) - [权重 99]
/admin/→ 0 秒(不缓存) - [权重 99]
/index.php/action/→ 0 秒(不缓存) - [权重 99]
/admin/plugins.php→ 0 秒(不缓存) [权重 10] 主题/插件静态资源目录(示例)
/usr/themes/handsome/static/→ 1 年/usr/themes/handsome/assets/→ 1 年/usr/plugins/**/static/→ 1 年/usr/uploads/→ 1 年
[权重 90] 首页
/→ 5–15 分钟确保首页
/的权重低于后台不缓存规则,避免被覆盖。
可选:如需对 archives 等列表/文章页做短期缓存(会影响评论的实时性),为相关目录单独设置几分钟的 TTL。
3. Cookie 与缓存键
- 关闭“携带 Cookie 缓存”或开启“带 Cookie 的请求不缓存”。
- 保持“忽略源站不缓存标头”为关闭,尊重源站的 Cache-Control/Set-Cookie。
4. 刷新与测试
- 刷新以下路径缓存:
/admin/*、/index.php/action/*、/、以及被误缓存的具体页面(如/admin/plugins.php)。 验证要点:
- 登录
POST的 302 响应能携带并落下登录相关Set-Cookie; - 后台页面响应应为
x-cache: MISS或无age; - 首页命中
x-cache: HIT,age逐步增大,符合设定的过期时间。
- 登录
参考链接
- 阿里云 CDN 帮助文档:配置缓存过期时间
结语
本问题的本质是“302 跟随吞掉 Set-Cookie”与“未登录模板被缓存”。按上面的两步到位:关闭回源 301/302 跟随 + 后台/动作不缓存,再配合首页的有限时缓存,即可既保证登录态正确,又兼顾前台加速效果。





12 条评论
说明用的cdn有缓存机制问题
/admin设置不缓存就可以了吧
刚开始这样设的,但是插件页面还是有问题,奇怪
这个问题还没遇到过 不过也可以学学 以防万一
可能是你很早都设置好了~
我之前好像也遇到过 CDN 吞 Cookie 的问题,后面是设置了自定义 CacheKey,保留登录 Cookie~
有空试试,我现在自定义CacheKey设置了保留oss水印的参数~
oss的水印是收费的,可以直接用ESA CDN的水印处理目前免费~
整过腾讯那个海外cdn的感觉速度一般,就撤掉了。
我只给国内区域加速,我的样式和图片挺多,用cdn快了一点
动态站不太适合弄cdn,我cdn设置只缓存图片
确实不适合,我刚开始缓存的就是静态资源,但那个时候我的后台就出问题了