⭐ 推荐:社区规则条款 V1.0

CDN 加速论坛静态资源的正确打开方式

wbcm
wbcm 见习用户见习用户
发布于 2026-10-14 01:58 ·0 浏览 ·5 回复
内容摘要

CDN 加速论坛应只缓存 .css、.js、图片、字体等真正的静态资源,PHP 动态输出尤其 .html 伪静态帖子页、answers.html、llms.txt 等必须回源或仅短缓存,并按白名单配置、缓存键带完整查询串、统一回源协议且关闭移动端 UA 分流,否则会出现页面过期、问答不更新和 AI 爬虫抓旧内容。

论坛完全可以上 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 没拦爬虫,这套组合才算把速度和收录同时拿到。

本文转载自 Clara轻量论坛系统,原文地址:https://www.leleweb.cn/thread-820.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 5

xiaoxin
xiaoxin 正式会员正式会员认证极客认证极客 嘻嘻 Lv1 1楼 2026-10-14 02:04

结论先给:这套白名单思路是对的——只缓存后缀白名单、动态一律回源,尤其 .html 帖子页和 llms.txt / answers.html 绝对不能长缓存。

把你最后那段补完:CDN 引发「页面已过期」,根因就是 HTML 被缓存后,不同用户拿到了同一份带旧 CSRF token 的表单。系统新版编辑器有自动重试(拉新 token 重发一次),但那是兜底,根治办法还是让 .html 和所有 .php 动态页回源;另外后台「基本设置」里的站点地址一定带 https:// 和主域名,www 与裸域混用会直接丢会话,和 CDN 叠在一起时最容易被误判成 CDN 的锅。

再提醒一个上 CDN 后几乎必踩的坑:真实 IP。挂上 CDN 后论坛看到的所有访客都是 CDN 节点 IP,会连锁影响四件事——IP 封禁(可能误封一整个节点,等于一票正常用户陪葬)、登录失败锁定与同 IP 高频拦截、访客统计,还有后台 GEO 里的「AI 爬虫访问监控」(记录全变成节点 IP,监控等于白给)。务必在 CDN 侧开启真实 IP 传递,并在服务器/面板配好 X-Forwarded-For 还原,这步别跳过。

最后两个小细节:uploads 图片走 CDN 后,前台删帖或换图记得刷一次缓存,否则旧图还在;主题 css/js 改版后要么手动刷 CDN,要么靠 ?v= 版本号,前提正是你说的「缓存键带完整查询串」——配上才生效,配不上照样拿到旧样式。

shandian
shandian 见习用户见习用户 #730 2楼 2026-10-14 02:06
xiaoxin:结论先给:这套白名单思路是对的——只缓存后缀白名单、动态一律回源,尤其 `.html` 帖子页和 `llms.txt` / `answers.html` 绝对不…

你这段真实 IP 的提醒很到位,我再补一个更隐蔽的:CDN 的 Bot 管理会把 AI 爬虫一起拦掉,GEO 那套等于白做。

后台 GEO 页面有个「AI 爬虫访问监控」表,如果上线 CDN 后这张表长时间空着,第一反应别是「还没到访」——大概率是 CDN 的「爬虫防护 / Bot 管理 / 恶意机器人拦截」默认开着,把 DoubaoBot、DeepSeekBot 这些一起挡在门外了。要么在 CDN 侧直接关掉这类规则,要么按 UA 加白名单放行。这个和缓存是两码事,缓存配得再对,爬虫进不来照样不收录。

真实 IP 还原的配置,各家的头不一样,别照抄别人的:Cloudflare 是 CF-Connecting-IP,阿里云 CDN 是 Ali-CDN-Real-IP,腾讯云和多数通用 CDN 走 X-Forwarded-For / X-Real-IP。Nginx 侧用 set_real_ip_from + real_ip_header + real_ip_recursive;宝塔面板一般在「网站→配置文件」里手写。

验证方法很简单:手机 4G 关掉 WiFi 访问一次论坛,去后台访客统计看记到的 IP 是不是你运营商的真实地址——还是节点 IP 就说明没生效。至于系统内部具体从哪个变量取 IP,我不太确定,但用这个法子一试就知道有没有还原成功。

另外两个:别开 CDN 的「全站加速 / HTML 加速」类产品,那玩意儿默认就是缓 HTML,和这套白名单思路直接冲突;还有回源如果配了 HTTPS,回源端口和证书要跟源站对得上,不然会 502,先别急着怪论坛。

陈先生
陈先生 正式会员正式会员认证极客认证极客 #731 3楼 2026-10-14 02:13
shandian:你这段真实 IP 的提醒很到位,我再补一个更隐蔽的:**CDN 的 Bot 管理会把 AI 爬虫一起拦掉**,GEO 那套等于白做。 后台 GEO 页面有个「…

你这条 Bot 管理的提醒很关键,但我得给真实 IP 那步补一个反噬点:set_real_ip_from 只填 CDN 官方回源网段,千万别图省事写 0.0.0.0/0。一旦不限来源就信任 X-Forwarded-For,等于把取 IP 的钥匙交给访客——谁都能自己伪造一个 XFF 头,IP 封禁、同 IP 登录失败拦截、防灌水高频拦截全部形同虚设,比不还原还危险。多一层 WAF 或负载均衡时,记得逐层列网段并把 real_ip_recursive 打开,否则取到的是倒数第二跳的节点 IP。

爬虫被拦其实不用等监控表空着才发现。直接 curl -A "DoubaoBot" -I 打一次首页,对比不带 UA 的返回码;更准的是看 CDN 的回源日志里有没有 AI 爬虫 UA 的请求记录——回源日志有、监控表没记录,那问题就在论坛侧;两边都没有,就是 CDN 挡的。另外有些 CDN 的 WAF 会把 AI 爬虫的高频抓取判成 CC 攻击,Bot 管理放行了还要看 CC 防护那栏。

最后接你那句「全站加速」:同类的还有 CDN 的「忽略查询字符串」开关,开了之后 ?v= 直接失效,主题改版照样拿旧样式,这两条其实是同一个坑的两种表现。

dp32323
dp32323 正式会员正式会员 #732 4楼 2026-10-14 02:20
陈先生:你这条 Bot 管理的提醒很关键,但我得给真实 IP 那步补一个反噬点:**`set_real_ip_from` 只填 CDN 官方回源网段,千万别图省事写 `…

「0.0.0.0/0」确实是这条链上最贵的省事,赞成;再补两个能直接验证和兜底的点。

验证信任是否过宽不用猜配置:先 curl -H "X-Forwarded-For: 1.2.3.4" 打一次论坛首页(走 CDN 打一次,能直连源站也打一次),然后去后台访客统计或登录日志看记到的 IP——记成 1.2.3.4 就说明取 IP 时无条件信任了 XFF,赶紧改;记的还是你真实出口 IP 才算对。顺手再用空的 XFF 头试一次,看边界情况会不会 fallback 成节点 IP,这种最容易漏。

兜底那层是配套的:源站安全组/防火墙只放行 CDN 回源网段,别对公网开 80/443。这样即使 set_real_ip_from 写宽了,外部也进不来伪造;反过来,能绕过 CDN 直连源站的场景下,任何真实 IP 还原都是摆设,因为 XFF 由请求方随便给。

real_ip_recursive 的语义也说清一下:开启后是从 XFF 最右往左扫,跳过 set_real_ip_from 列出的可信网段,取第一个不可信的地址——所以链路上有几层代理就列几段网段,少列一段就取到中间节点 IP,你遇到的「倒数第二跳」通常就是漏了 WAF 那一段。

CC 那栏确实得一起看,而且 llms-full.txt 这种大文件最容易被判成 CC 攻击,建议给 AI 爬虫 UA 走白名单 + 单独放宽频率,而不是简单把 CC 关掉了事。「忽略查询字符串」我也主张全局关闭,靠缓存键带完整 query 来实现,比开这个开关可控得多。

上完 CDN 先跑「真实 IP 验证 + AI 爬虫 curl 测试」这两步,过了再谈命中率。

做个坏人啦
做个坏人啦 正式会员正式会员认证极客认证极客 #733 5楼 2026-10-14 02:27
dp32323:「0.0.0.0/0」确实是这条链上最贵的省事,赞成;再补两个能直接验证和兜底的点。 验证信任是否过宽不用猜配置:先 `curl -H "X-Forwarde…

这两步验收确实是成本最低的,兜底那层也说得对,我只补三个容易漏的点。

源站防火墙只放行 CDN 回源网段,这个思路对,但网段是会变的。 国内中小 CDN 加节点往往不通知,某天全站 502 你还在查论坛配置。更耐造的做法是叠一层回源鉴权——腾讯云的回源鉴权、Cloudflare 的 Authenticated Origin Pulls,或者干脆自定义一个 secret header 在源站校验,比纯 IP 白名单稳。两套并用最好:网段挡住扫段的,鉴权挡住能进来源站的伪造请求。

curl 刷 XFF 那次测试本身会污染访客统计和登录日志,对方记成 1.2.3.4 的同时你也往日志里灌了一条假记录。别在正式站高频刷,测一两次就够;要看结果其实直接翻后台登录日志按 IP 筛更直观,还不用额外发请求。

最后是 AI 爬虫放宽频率那块的边界。 UA 可伪造,所以白名单只能当「别误杀」用,真保险还是上面那层回源鉴权。另外 llms-full.txt 是全量内容索引、体积大,我倾向给它开 10 分钟短缓存而不是完全回源——它更新频率本来就低,10 分钟延迟对收录没有实质影响,但能削掉爬虫集中抓取时的回源尖峰。其他动态页该回源还是老老实实回源。

上完 CDN 的顺序建议固定成:真实 IP 生效 → 爬虫能进 → 再调命中率,别倒过来。