使用阿里云 ESA(边缘安全加速) 加速 Discuz! 论坛,核心在于合理的缓存规则配置(动静分离)以及大文件优化(即你提到的“分片切割”,在 CDN/ESA 语境下通常指 Range 分片回源)。
Discuz! 是一个典型的动态 PHP 论坛,如果配置不当(例如缓存了动态页面),会导致用户看不到最新的帖子、无法登录或验证码错误。以下是详细的操作指南:
一、核心概念澄清:什么是“分片切割”?
在阿里云 ESA/CDN 的语境下,你提到的“分片切割”通常指的是 Range 分片回源(Range Requests)。
- 作用:当用户请求一个大文件(如论坛附件、高清图片、安装包)时,ESA 节点不会一次性向源站请求整个文件,而是根据用户需求,只请求文件的一部分(例如前 1MB)。
- 好处:
- 秒开体验:用户无需等待整个大文件下载完即可开始播放视频或预览。
- 节省源站带宽:如果用户中途取消下载,源站不需要传输剩余部分。
- 提高缓存命中率:大文件可以被更灵活地缓存和分发。
- 如何配置:
- 登录 阿里云 ESA 控制台。
- 进入 站点管理 -> 选择你的域名。
- 在左侧菜单找到 速度和网络 -> 优化配置(或直接搜索“Range”)。
- 找到 Range 回源 选项,将其状态设置为 开启。
- 注意:此功能主要对静态大文件(
.zip, .rar, .mp4, .jpg 等)生效,对 Discuz 的 PHP 动态页面无效且不应生效。
二、Discuz! 论坛加速配置实战(关键步骤)
加速 Discuz 的核心是动静分离:静态资源(图片、CSS、JS、附件)走缓存,动态页面(发帖、登录、列表)不回源或仅短暂缓存。
1. 基础接入
- 将你的域名(如
bbs.example.com)CNAME 解析到阿里云 ESA 提供的 CNAME 地址。
- 确保 HTTPS 证书已部署(ESA 支持免费申请或上传)。
2. 配置缓存规则(最重要的一步)
Discuz 默认生成的 URL 往往不带后缀(伪静态),或者后缀是 .html 但实际是 PHP 生成的。错误的缓存会导致论坛“变砖”。
请在 ESA 控制台的 缓存配置 -> 缓存规则 中,按以下顺序添加规则(优先级从上到下):
| 匹配类型 |
匹配内容 (示例) |
缓存策略 |
缓存时间 |
说明 |
| 文件后缀 |
jpg, jpeg, png, gif, webp, ico, svg |
缓存 |
1个月 - 1年 |
论坛头像、表情、普通图片 |
| 文件后缀 |
css, js, woff, woff2, ttf, eot |
缓存 |
1个月 |
样式表和脚本文件 |
| 文件后缀 |
zip, rar, 7z, tar, gz, mp4, mp3 |
缓存 |
1个月 |
论坛附件(配合 Range 分片效果极佳) |
| 目录路径 |
/static/, /template/, /uc_server/ |
缓存 |
1个月 |
Discuz 默认的静态资源目录 |
| 目录路径 |
/data/attachment/ |
缓存 |
1小时 - 1天 |
用户上传的附件目录(视更新频率而定) |
| 文件后缀 |
php |
不缓存 |
0 |
强制不缓存 PHP 文件(防止缓存动态脚本) |
| 全站默认 |
/* (所有其他请求) |
不缓存 |
0 |
关键! Discuz 的伪静态链接(如 thread-123-1-1.html)本质是动态的,必须禁止缓存,否则用户看不到新帖。 |
特别提示:
- 不要试图缓存
thread-*.html 或 forum-*.html 这种伪静态页面,除非你使用了 Discuz 的高级静态化插件并且非常清楚自己在做什么。对于大多数论坛,动态内容直接回源是最安全的。
- 如果希望加速列表页,可以设置极短的缓存时间(如 10 秒),但需注意数据一致性问题。
3. 忽略参数缓存(提升命中率)
Discuz 的链接常带有 ?mod=viewthread&id=123 或防抖动的随机参数。
- 在 缓存配置 -> 高级设置 中,开启 忽略参数缓存(或配置“缓存键忽略参数”)。
- 这样可以确保
image.jpg?t=123 和 image.jpg?t=456 命中同一个缓存文件。
- 例外:如果某些动态请求依赖参数(如验证码接口
seccode.php?update=123),需要在“不缓存规则”中单独指定该路径,或者在忽略参数列表中排除特定参数(较复杂,建议直接对 seccode.php 等关键动态文件设置“不缓存”)。
4. 回源 Host 配置
- 在 回源配置 中,确保 回源 Host 设置为你加速的域名(如
bbs.example.com),而不是源站 IP。否则 Discuz 可能会生成错误的内部链接或无法识别站点。
5. 协议跟随与 HTTP/2
- 开启 HTTP/2:显著提升多资源并发加载速度(论坛页面通常包含大量小图片/CSS)。
- 开启 协议跟随:用户用 HTTPS 访问,回源也用 HTTPS(如果源站支持),保证安全性。
三、Discuz 后台配合设置
除了阿里云 ESA 的配置,还需要在 Discuz 后台做简单调整:
- 附件URL:
- 进入 Discuz 后台 -> 全局 -> 上传设置。
- 如果 ESA 是二级域名(如
static.example.com),建议将附件 URL 指向该域名,利用浏览器并行下载优势。如果是主域名加速,则无需修改。
- 静态化(可选):
- 如果你确实想缓存 HTML 页面,需在 Discuz 后台开启 论坛静态化,生成真正的
.html 文件。此时,你可以在 ESA 中对 .html 后缀设置较长的缓存时间。
- 警告:开启静态化后,发帖、回复后需要手动或自动更新静态文件,否则新用户看不到内容。新手建议关闭静态化,依靠 ESA 加速静态资源即可,动态页面直接回源。
四、验证是否生效
- 检查静态资源:
- 打开论坛页面,按 F12 开发者工具 -> Network。
- 刷新页面,查看
.css, .js, .jpg 等文件。
- 状态码应为
200 (首次) 或 304 / 200 (from cache)。
- 响应头中应包含
x-cache: HIT 或类似标识(具体看 ESA 返回头),且 Server 字段可能显示 ESA 相关信息。
- 检查大文件分片:
- 下载一个论坛大附件。
- 在 Network 面板中点击该文件,查看 Request Headers。
- 如果看到
Range: bytes=0-xxxx,说明浏览器或 ESA 正在使用分片请求。
- 查看 ESA 控制台的监控数据,观察回源带宽是否小于用户请求带宽(理想情况)。
- 检查动态页面:
- 发布一个新帖子。
- 立即用无痕模式访问,确认能否立刻看到新帖。如果看不到,说明动态页面被错误缓存了,请检查上述“缓存规则”中的“全站默认”和
php 后缀规则。
总结
- 分片切割 = 在 ESA 控制台开启 Range 回源,主要用于加速附件和大图片。
- 加速 Discuz 的关键 = 严格禁止缓存动态页面(PHP 及伪静态 HTML),大力缓存静态资源(图片/CSS/JS/附件)。
- 避坑指南:千万不要为了追求 100% 命中率而缓存了
thread-xxx.html,这会导致论坛数据不同步,用户体验极差。
|