论坛完全可以上 CDN,但正确的做法是只让 CDN 接管 .css/.js/图片/字体这类真正的静态文件,凡是 PHP 动态输出的一律回源不缓存——尤其是带 .html 后缀的伪静态帖子页、llms.txt、answers.html,一旦被 CDN 缓存,就会出现「页面已过期」报错、问答池不更新、AI 爬虫抓到旧内容三类问题。下面按顺序说清判断标准、配置清单和踩坑点。
论坛哪些文件才算真静态资源?
结论:只按「文件后缀 + 目录」两个维度判断,别看 URL 好不好看。
Clara BBS 是 PHP 单模板响应式架构,前端只有一套视图,静态文件集中在主题目录里的 .css、.js、图标、字体,以及 uploads 目录下的图片。这些文件的内容和 URL 一一对应,改了就是新文件,天然适合 CDN(内容分发网络,把文件缓存到离用户最近的节点,用户就近取)。
反过来,.php 结尾的入口、后台、接口,以及所有由 PHP 实时拼出来的 HTML,内容因人、因登录态、因时间而变,属于动态内容,交给 CDN 只会出乱子。判断标准就一条:同一 URL 在 10 分钟内对不同用户返回的内容是否完全一致,一致才能缓存。
为什么带 .html 后缀的帖子页不能交给 CDN?
结论:Clara BBS 的伪静态是系统自动识别 .html 后缀 URL,服务器只需把非静态文件请求转发到 index.php,所以 .html 只是「看起来像静态页」,本质是动态生成的。
这是配 CDN 时最容易翻车的一点。很多 CDN 和面板的默认规则是「后缀是 .html 就当作静态页面长缓存」,套到论坛上等于给每个帖子页做了 7 天快照:楼主改了内容不生效、悬赏帖采纳了最佳答案页面不变、新回复看不到。
同样的坑还有三个「名字像静态、其实是动态」的文件:
answers.html —— 问答聚合页,由悬赏帖的「问题 + 最佳答案」实时成对生成;
llms.txt / llms-full.txt —— 自动生成版块结构和精华帖索引;
robots.txt —— 决定 AI 爬虫能不能进,改错代价最大。
这四个必须回源,或者最多给 10 分钟短缓存。
CDN 缓存规则怎么配?一份可直接照抄的清单
结论:白名单式配置——只缓存明确列出的静态后缀,其余全部回源。
缓存(TTL 建议 30 天):
.css .js .png .jpg .jpeg .gif .webp .svg .ico
.woff .woff2 .ttf .mp4
不缓存 / 直接回源:
.php 入口、后台、接口
.html 伪静态帖子页、版块页
/admin /api /install
llms.txt llms-full.txt answers.html
三条硬要求:① 缓存键必须带上完整查询串,否则 style.css?v=2 的版本号会失效;② 回源协议跟站点地址保持一致(带 https:// 与主域名),避免 www 与裸域混用导致会话丢失;③ 因为是单模板响应式,关掉 CDN 的「移动端 UA 分流缓存」,别为手机和桌面各存一份副本,只会拉低命中率并制造缓存不一致。
上 CDN 后为什么会出现「页面已过期,请刷新后重试」?
结论:这是 CSRF(跨站请求伪造,论坛给每个表单发一次性 token 校验来源)校验没过,常见诱因之一就是 HTML 被 CDN 缓存后,A 用户拿到了 B 用户页面里的旧 token。
Clara BBS 全站带 CSRF 防护,新版编辑器已内置自动重试机制(拉取新 token 重发一次),但这是兜底,不是让你把 HTML 缓存打开的理由。正确做法是让 HTML 一律不缓存,只对无 Cookie 的静态后缀请求做长缓存。
另外把后台「基本设置」的站点地址填对(带 https:// 和主域名),能顺带解决一部分因域名跳转引起的会话丢失。
CDN 会不会把 AI 爬虫拦掉,让 GEO 白做?
结论:会,而且很隐蔽——robots.txt 放行 ≠ 爬虫真能进来。
Clara BBS 的 GEO 优化默认放行豆包 DoubaoBot、DeepSeekBot、元宝、Kimi、百度等 16+ 中国系 AI 爬虫,以及 GPTBot、ClaudeBot 等国际系。但如果 CDN 开了 CC 防护或爬虫挑战,HTTP 层就把这些 UA 拦在门外,收录自然无从谈起。
验证方法很直接:进后台「系统设置 → GEO 优化」,看「AI 爬虫访问监控」表里有没有爬虫记录、最近抓了哪些页面。如果一周内一条都没有,先去 CDN 防火墙放行已知爬虫 UA 或关掉对它们的挑战。收录通常需要 1-4 周,加速发现可配百度推送 Token(百度站长平台获取),IndexNow 默认开启,新帖发布自动推送。
改了静态文件,缓存怎么刷?
结论:优先改文件名或加版本号,而不是指望手动刷新所有节点。
Clara BBS 本身没有编译缓存,「保存即生效」指的是服务端,CDN 这层缓存不归它管。所以改主题 CSS/JS 时,把引用改成 style.css?v=20250101 这种带版本号的写法,新 URL 自动穿透旧缓存;只改了文件内容却没改 URL,就得去 CDN 控制台提交刷新,节点多的时候刷新要几分钟到十几分钟才全网生效。
插件也同理:content/plugins 是运行时钩子加载、保存即生效,但插件如果带了前端 JS/CSS,别忘了刷对应资源。
回到一句话:CDN 加速论坛的要诀是「静态后缀白名单长缓存,HTML 与 GEO 文件一律回源」,再顺手确认 CDN 没拦爬虫,这套组合才算把速度和收录同时拿到。