针对 Discuz! 论坛在阿里云 ESA(边缘安全加速,原 DCDN/全站加速)上的缓存配置,核心原则是:“静态资源长缓存,动态页面不缓存(或短缓存),严格区分用户状态”。Discuz 是一个高度动态的社区系统,错误的缓存配置会导致用户看不到自己的帖子、登录状态失效或后台数据不同步。
以下是基于 2026 年阿里云 ESA 控制台的推荐配置方案:
1. 核心策略概览
| 资源类型 |
路径/特征 |
缓存策略 |
缓存时间 (TTL) |
备注 |
| 静态资源 |
.css, .js, .jpg, .png 等 |
强制缓存 |
1 个月 ~ 1 年 |
需配合文件名哈希或版本更新 |
| 论坛附件 |
/data/attachment/ |
强制缓存 |
1 周 ~ 1 个月 |
图片、头像等 |
| 动态页面 |
.php, /forum.php, /home.php |
不缓存 |
0 (跟随源站) |
防止用户看到别人的数据 |
| 特殊接口 |
member.php, api.php |
不缓存 |
0 |
涉及登录、交互、API |
| 后台管理 |
/admin.php |
不缓存 |
0 |
必须实时 |
2. 详细配置步骤 (阿里云 ESA 控制台)
登录阿里云 ESA 控制台,进入你的域名管理页面,找到 “缓存配置” (Cache Configuration) 模块。
第一步:设置全局默认规则 (兜底策略)
为了防止未命中的动态请求被意外缓存,先设置一个保守的全局默认值。
- 配置类型:所有文件 (或
*)
- 缓存过期时间:
0 秒 (或不缓存)
- 说明:这意味着默认情况下,所有请求都会回源,保证动态内容的实时性。我们将通过后续规则“白名单”静态资源。
第二步:配置静态资源长缓存 (加速关键)
添加多条规则,针对静态后缀名进行长周期缓存。这是提升论坛加载速度的关键。
-
规则 1:图片与媒体文件
- 匹配内容:文件后缀名
- 值:
jpg, jpeg, png, gif, bmp, webp, ico, svg, mp4, webm
- 缓存时间:
30 天 (或更长,如 1 年,如果你使用了文件名哈希)
- 忽略参数:勾选 (重要!防止
?random=123 导致缓存失效)
-
规则 2:样式与脚本文件
- 匹配内容:文件后缀名
- 值:
css, js, woff, woff2, ttf, eot
- 缓存时间:
30 天
- 忽略参数:勾选
-
规则 3:Discuz 附件目录 (强烈推荐)
- 匹配内容:目录路径
- 值:
/data/attachment/ (注意:根据你的实际部署路径,可能是 /bbs/data/attachment/)
- 缓存时间:
7 天
- 说明:论坛的头像、帖子图片都在这个目录下,单独对此目录做长缓存效果极佳。
第三步:配置动态页面“不缓存” (防错关键)
虽然全局默认了不缓存,但为了保险起见,建议显式地对动态入口做“不缓存”设置,特别是当源站返回了错误的缓存头时,ESA 的优先级规则可以覆盖源站。
-
规则 4:PHP 动态程序
- 匹配内容:文件后缀名
- 值:
php
- 缓存时间:
0 (不缓存)
-
规则 5:特定动态目录 (可选但推荐)
- 匹配内容:目录路径
- 值:
/admin.php, /member.php, /api/, /source/
- 缓存时间:
0
3. 高级优化技巧 (解决痛点)
A. 处理“忽略参数” (Cache Key 优化)
Discuz 的很多静态资源链接可能会带上时间戳参数(例如 style.css?ver=123)。
- 操作:在 ESA 的 “缓存键 (Cache Key)” 配置中,开启 “忽略参数” 功能。
- 作用:让
logo.png?v=1 和 logo.png?v=2 命中同一个缓存文件(前提是你在更新文件时改变了文件名或通过刷新功能更新)。
- 注意:对于动态页面(如
forum.php?mod=viewthread&tid=123),绝对不能忽略参数,否则所有用户看到的都是同一个帖子的缓存!
- 建议:仅在上述“静态资源”的规则中生效忽略参数,或者在全局忽略参数列表中,排除
tid, pid, page, mod 等 Discuz 核心参数(如果支持精细配置)。最简单的方法是只对静态后缀名规则开启忽略参数,动态请求保持默认(保留参数)。
B. 浏览器缓存 (Client Cache)
ESA 有两个缓存时间设置:边缘节点缓存 (ESA 到源站) 和 浏览器缓存 (用户到 ESA)。
- 建议在 “响应头配置” 或缓存规则的高级选项中,设置
Cache-Control: max-age=2592000 (30天) 给静态资源。
- 这样用户第二次访问时,连 ESA 都不用回,直接读本地浏览器缓存,速度最快。
C. 登录状态与 Cookie 穿透
Discuz 依赖 cookie (通常是 auth, saltkey 等) 来识别用户。
- 现状:阿里云 ESA 默认通常不会因为存在 Cookie 而自动跳过缓存,除非源站返回了
private 或 no-cache。
- 检查:确保你的 Discuz 程序(
config_global.php 或 Nginx/Apache 配置)对已登录用户或动态页面输出了正确的 Cache-Control: no-cache, private 头。
- ESA 设置:在 ESA 的 “智能缓存” 或 “自定义规则” 中,可以设置:当请求包含特定 Cookie (如
auth) 时,不缓存。这能彻底杜绝“游客看到已登录用户内容”的严重事故。
D. 开发模式 (调试用)
当你需要修改论坛模板或插件代码时:
- 在 ESA 控制台开启 “开发模式” (Development Mode)。
- 这会暂时绕过所有缓存,持续约 3 小时。修改完成后务必关闭,否则流量费用会激增且速度变慢。
4. 常见问题排查
-
修改了模板/图片,前台没变化?
- 去 ESA 控制台使用 “刷新预热” -> “URL 刷新”,输入具体的文件地址或目录(如
/data/attachment/)进行清除。
- 如果是代码逻辑问题,检查是否开启了“开发模式”。
-
用户反馈登录后显示的是别人的帖子?
- 这是最严重的缓存事故。立即检查:
- PHP 动态页面是否被强制缓存了?(确保
.php 缓存时间为 0)。
- 源站是否错误地返回了
public 缓存头给动态页面?
- 是否在带有
tid 参数的动态 URL 上开启了“忽略参数”?
-
移动端 App 接口报错?
- Discuz 的 API (
/api/mobile/index.php) 必须设置为 不缓存。请单独添加一条规则针对 /api/ 目录缓存时间为 0。
总结配置清单 (可直接参考实施)
| 匹配类型 |
匹配值 |
缓存时间 |
忽略参数 |
备注 |
| 后缀名 |
jpg,jpeg,png,gif,webp,ico,svg |
30 天 |
✅ 是 |
图片资源 |
| 后缀名 |
css,js,woff,woff2,ttf |
30 天 |
✅ 是 |
样式脚本 |
| 目录 |
/data/attachment/ |
7 天 |
✅ 是 |
论坛附件 |
| 后缀名 |
php |
0 (不缓存) |
❌ 否 |
动态程序 |
| 目录 |
/admin.php |
0 (不缓存) |
❌ 否 |
后台管理 |
| 目录 |
/api/ |
0 (不缓存) |
❌ 否 |
接口调用 |
| 全局默认 |
* |
0 (不缓存) |
❌ 否 |
安全兜底 |
按照此方案配置,既能最大化利用 ESA 加速静态资源(提升 80% 以上的加载速度),又能确保论坛的动态交互功能(发帖、回帖、登录)完全正常。
|
最后回复时间:2026-03-20 21:33:02社区官方发言人回复了此贴
温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、如果有侵犯到您的权益,请第一时间联系邮箱 990037279@qq.com ,站长会进行审查,情况属实的会在三个工作日内为您删除。
|