在 Discuz 论坛中结合 腾讯云 EO (EdgeOne)、对象存储 (COS) 和 二级域名 来实现高效的“读图分离”(即图片/附件通过独立的加速域名加载),是目前提升论坛性能的最佳实践。
由于腾讯云 CDN/ECDN 已全面升级为 EO (EdgeOne),且 Discuz 原生对云存储的支持通常依赖插件或远程附件功能,以下是基于 2026 年最新环境的完整配置流程:
核心架构思路
- 存储层:使用 腾讯云 COS 存储所有论坛附件和图片。
- 加速层:使用 腾讯云 EO (EdgeOne) 绑定一个二级域名(如
img.yourdomain.com),回源指向 COS 存储桶。
- 应用层:在 Discuz 后台 配置远程附件,将图片上传路径指向该二级域名。
第一步:准备 COS 存储桶 (Storage)
-
创建存储桶:
- 登录腾讯云控制台,搜索“对象存储 COS”。
- 创建一个存储桶(Bucket),建议选择与你的服务器同地域(减少内网传输费,虽然后台上传走公网,但管理方便)。
- 权限设置:建议设置为 公有读私有写(Public Read)。这样 EO 回源时不需要复杂的鉴权配置,直接读取文件即可。
- 记录信息:记下
存储桶名称 和 所属地域。
-
配置 CORS (跨域资源共享) (重要):
- 在 COS 控制台找到该存储桶 -> 基础配置 -> 跨域设置 (CORS)。
- 添加规则:允许来源
*,允许方法 GET, POST, PUT,允许头部 *。这能防止浏览器拦截图片加载。
第二步:配置腾讯云 EO (EdgeOne) 加速
这是替代旧版 CDN 的关键步骤。
-
接入站点:
- 登录 腾讯云 EO 控制台。
- 点击 “添加站点”。
- 输入域名:输入你准备好的二级域名,例如
img.yourdomain.com 或 cdn.yourdomain.com。
- 选择套餐:根据流量需求选择免费版或付费版(个人小站免费版通常够用)。
-
配置回源 (Origin):
- 在站点配置页面,找到 “回源配置”。
- 源站类型:选择 “对象存储 COS” (如果列表中有) 或者 “IP/域名”。
- 推荐方式:选择 自定义源站 (域名)。
- 源站地址:填写 COS 的默认访问域名。
- 格式通常为:
<BucketName>-<AppID>.cos.<Region>.myqcloud.com
- 例如:
example-1250000000.cos.ap-guangzhou.myqcloud.com
- 注意:请在 COS 控制台概览页复制该域名,不要填错。
- 协议跟随:建议开启 HTTPS 回源(如果你的 COS 支持)或 HTTP 回源(COS 默认支持 HTTP)。
-
配置缓存规则:
- 在 “缓存配置” 中,针对图片后缀设置较长的缓存时间。
- 添加规则:文件后缀
.jpg, .png, .gif, .webp, .bmp,缓存过期时间建议设置为 30 天 或 1 个月。这能极大减少回源流量,提升加载速度。
-
验证 CNAME 解析:
- EO 会分配给你一个 CNAME 地址(例如
img.yourdomain.com.edgeone.net 或类似)。
- 前往你的 域名解析控制台 (DNSPod 或其他)。
- 添加一条记录:
- 主机记录:
img (对应二级域名前缀)
- 记录类型:
CNAME
- 记录值:填入 EO 提供的 CNAME 地址。
- 等待生效(通常几分钟)。
-
HTTPS 证书:
- 在 EO 控制台的 “SSL 证书” 选项中,申请并部署免费证书,确保
https://img.yourdomain.com 可以正常访问。
第三步:Discuz 后台配置 (应用层)
Discuz X3.5 及更新版本通常推荐使用插件来完美支持 COS,原生远程附件功能对 COS 的支持较为有限(主要支持 FTP/SFTP)。
方案 A:使用官方/第三方 COS 插件(推荐,最稳定)
目前 Discuz 应用中心有成熟的“腾讯云 COS”插件(如由 Discuz 官方或社区大神开发)。
- 下载安装插件:
- 进入 Discuz 后台 -> “插件” -> “获取更多插件”。
- 搜索关键词
COS 或 腾讯云。
- 安装并启用插件(例如“发帖图片附件上传 COS”)。
- 配置插件参数:
- 进入插件设置页面,填入以下信息:
- SecretId / SecretKey:在腾讯云 CAM 访问管理中创建的子账号密钥(建议只给 COS 读写权限)。
- Bucket:你的存储桶名称。
- Region:存储桶地域(如
ap-guangzhou)。
- 访问域名 (URL):关键步骤,这里填入你配置好 EO 的二级域名,例如
https://img.yourdomain.com。
- 原理:插件上传文件到 COS 后,生成链接时会自动拼接这个域名,用户访问时就会走 EO 加速。
- 迁移旧数据 (可选):
- 部分高级插件提供“一键迁移”功能,可将服务器上旧的
attachment 目录图片同步到 COS。如果没有,可手动使用 COS 迁移工具。
方案 B:使用 Discuz 原生“远程附件”功能 (仅限 FTP 模式,不推荐直连 COS)
注意:Discuz 原生的远程附件主要针对 FTP/SFTP 服务器。虽然可以通过挂载 COS 为本地磁盘(使用 cosfs)来“欺骗”Discuz,但这在并发高时极不稳定,强烈不建议用于生产环境。
如果你坚持要用原生功能,必须配合 cosfs 将 COS 挂载为服务器本地目录,然后将远程附件设置为“本地”,但这失去了云存储的意义。因此,请务必采用方案 A (插件法)。
第四步:验证与优化
-
测试上传:
- 在论坛发布一个带图的帖子。
- 右键点击图片,选择“在新标签页打开图片”。
- 检查 URL 是否为
https://img.yourdomain.com/...。
- 检查响应头(Response Headers),看是否有
X-Cache-Lookup 或 Via 等 EO 相关的标识,确认是否命中缓存。
-
防盗链配置 (安全):
- 在 EO 控制台:找到 “访问控制” -> “Referer 黑白名单”。
- 设置 白名单:允许
*.yourdomain.com 和空 Referer (部分浏览器直接打开图片时为空)。
- 这样可以防止别人直接在他们的网站引用你的图片消耗你的 EO 流量。
-
混合内容检查:
- 确保你的 Discuz 全站开启了 HTTPS。
- 如果论坛是 HTTPS,而图片域名配置的是 HTTP,浏览器会报“混合内容”错误并不显示图片。务必保证 EO 绑定的二级域名也启用了 HTTPS。
常见问题排查
- 图片无法显示 (403 Forbidden):
- 检查 COS 存储桶权限是否为“公有读”。
- 检查 EO 的回源域名是否正确。
- 检查 EO 或 COS 是否开启了防盗链,而你的请求没有带正确的 Referer。
- 上传图片慢:
- 上传过程是
用户 -> 服务器 -> COS。EO 只加速下载(读),不加速上传(写)。
- 若要加速上传,需要服务器与 COS 在同一地域(走内网),或者在插件中开启“客户端直传 COS”功能(部分高级插件支持,可绕过服务器带宽)。
- 旧图片链接未变:
- 数据库中存储的旧图片链接仍然是老域名。你需要运行 SQL 语句批量替换,或使用插件自带的“历史数据迁移/链接替换”功能。
- SQL 示例 (请备份数据库后操作):
UPDATE pre_forum_attachment SET attachurl = REPLACE(attachurl, 'http://old-domain.com/', 'https://img.yourdomain.com/');
-- 注意:Discuz 图片路径可能分散在 pre_forum_attachment, pre_forum_post 等表中,具体需根据插件逻辑处理,通常插件会自动处理新帖,旧帖需专用工具。
通过以上步骤,你的 Discuz 论坛即可实现静态资源与动态内容的彻底分离,利用腾讯云 EO 的全球节点加速图片加载,显著提升用户体验。
|