在腾讯云 EdgeOne (EO) 中加速 Discuz! 论坛,核心在于动静分离和缓存策略优化。Discuz! 是典型的动态论坛程序(PHP+MySQL),用户发帖、登录、浏览帖子列表等都是动态请求,而图片、附件、CSS/JS 文件是静态资源。
所谓的“分片切割”在 CDN/EO 语境下通常指的是分片回源(Range Request),主要用于加速大文件(如视频、大型附件)的下载,而不是用来“切割”Discuz 程序本身。
以下是具体的配置指南:
一、核心思路:动静分离
不要对整个域名开启全量缓存,否则用户无法登录或看到最新的帖子。
- 动态内容(PHP页面、API接口):不缓存或极短缓存,回源到服务器。
- 静态内容(图片、附件、CSS、JS):长时间缓存,由 EO 节点直接返回。
二、具体配置步骤
1. 接入站点
在腾讯云 EO 控制台添加你的 Discuz 域名(例如 bbs.example.com),将 DNS 解析指向 EO 提供的 CNAME 地址。
2. 配置缓存规则(最关键的一步)
进入 EO 控制台的 “站点配置” -> “缓存配置”,自定义缓存规则:
| 文件类型/路径 |
缓存过期时间 (TTL) |
说明 |
图片/附件 (*.jpg, *.png, *.gif, *.zip, *.rar) |
30天 - 1年 |
Discuz 的附件通常上传在 /data/attachment/ 目录,务必强制缓存。 |
静态资源 (*.css, *.js, *.woff, *.ttf) |
30天 - 1年 |
论坛的主题样式和脚本。 |
动态页面 (*.php) |
不缓存 (0秒) 或 跟随源站 |
重要:防止用户登录状态失效或看到旧帖子。 |
特定目录 (/data/attachment/*) |
30天 - 1年 |
针对 Discuz 默认附件目录做整体缓存规则。 |
| 其他所有文件 |
默认 (如 1小时) |
兜底策略。 |
注意:Discuz! 的伪静态规则(如 forum-1-1.html)虽然后缀不是 php,但本质是动态生成的。建议在 EO 中设置忽略参数缓存,或者确保源站 Header 中设置了 Cache-Control: no-cache 给动态页面,EO 通常会遵循源站头部。
3. 开启“分片回源” (即你问的分片切割)
如果你的论坛有很多大附件(如几 GB 的游戏安装包、高清视频),开启此功能可以显著提升下载速度和稳定性。
- 位置:EO 控制台 -> “站点配置” -> “回源配置” (或在 CDN 部分的“高级配置”)。
- 操作:找到 “分片回源” (Range 回源) 选项并开启。
- 原理:
- 当用户下载一个大文件时,如果网络中断或需要快速起播,客户端会发送
Range: bytes=0-1024 这样的请求。
- 开启前:EO 节点如果没有完整缓存,会向源站请求整个大文件,浪费带宽且慢。
- 开启后:EO 节点只向源站请求用户需要的那一部分(切片),缺哪块补哪块。
- 前提条件:你的源站服务器(Nginx/Apache/IIS)必须支持 HTTP Range 请求(现代 Web 服务器默认都支持)。
- Nginx 检查:确保没有配置
max_ranges 0;。
- Apache 检查:确保
mod_range 模块启用。
4. 优化 Discuz! 程序内部设置
为了让 EO 发挥最大效果,需要在 Discuz! 后台进行配合:
- 开启远程附件 (可选但推荐):
- 如果附件非常多,建议将 Discuz 的附件目录挂载到腾讯云 COS (对象存储),并在 Discuz 后台开启“远程附件”。
- 然后将 COS 绑定到 EO 作为另一个域名加速,或者直接让 EO 加速这个 COS 域名。COS 原生支持分片读取,配合 EO 效果极佳。
- 模板刷新:
- 在 Discuz 后台 -> “工具” -> “更新缓存”,确保生成的静态文件(css/js)带有版本号(Discuz 通常会自动处理,如
common.css?ver=2026),这样更新主题时用户能立即获取新文件,而不会命中旧缓存。
三、常见问题排查
-
用户无法登录/登录后跳回登录页:
- 原因:
*.php 文件或包含 Session/Cookie 的动态页面被 EO 缓存了。
- 解决:检查缓存规则,确保
.php 结尾的文件缓存时间为 0,或者在 EO 中配置“忽略 Cookie 缓存”(如果业务允许)。
-
发帖后图片不显示或显示旧图:
- 原因:文件名相同但内容变了,浏览器或 EO 还在用旧缓存。
- 解决:Discuz 通常会在附件 URL 后加时间戳。如果没有,你需要在 EO 控制台手动刷新缓存(Purge Cache),输入具体的图片 URL 进行清除。
-
分片回源不生效:
- 使用
curl -I -r 0-100 https://你的域名/大文件.zip 命令测试。
- 如果返回状态码是
206 Partial Content,说明分片回源正常工作。
- 如果返回
200 OK 且没有 Content-Range 头,说明源站不支持 Range 请求或 EO 未正确配置。
总结
- 加速 Discuz = 动静分离缓存策略 (静态长缓存,动态不缓存)。
- 分片切割 = 开启“分片回源”功能,专门用于优化大附件下载体验,无需修改代码,只需在 EO 控制台开启并确保源站支持 Range 请求。
如果你主要困扰的是论坛打开慢,优先检查缓存规则是否把动态页面误缓存了,或者静态资源没缓存住。
|