Discuz! 标准版本本身不自带对象存储 OSS 原生开关,通常需要通过第三方插件或二次开发实现。适合图片附件多、本地磁盘空间不足的论坛,切换前需备份数据并确认插件兼容性。
先说结论:Discuz! 本地存储改 OSS 主要依赖插件,能有效减轻服务器磁盘压力,但需注意附件链接迁移和插件维护风险。
- 适合:图片附件量大、本地磁盘扩容成本高、需要 CDN 加速的场景
- 先准备:阿里云 OSS 或腾讯云 COS 存储桶、兼容当前 Discuz 版本的存储插件、全站数据备份
- 验收:新上传图片能正常显示、旧图片链接不失效、后台存储设置无报错
快速处理思路
Discuz! 配置 OSS 不涉及命令行操作,主要通过后台安装插件和配置参数完成。
1. 登录 Discuz! 管理中心,进入“应用”页面搜索“OSS”或“对象存储”。
2. 选择评分高、更新近的插件安装,注意查看插件支持的 Discuz! 版本号。
3. 在云服务商控制台创建 Bucket,设置读写权限为公共读或私有读(配合签名)。
4. 将 AccessKey、SecretKey、Bucket 域名填入插件配置页,开启远程附件功能。
为什么会这样
Discuz! 早期设计基于本地文件系统,原生仅支持 FTP 远程附件,不支持现代对象存储协议。
随着图片视频内容增加,本地磁盘 IO 和容量成为瓶颈,对象存储将文件分离到云端,服务器只存数据库和程序代码。公开资料中没有看到可靠的量化数据表明具体节省多少空间,但逻辑上本地磁盘占用会随新附件上传停止增长。这种架构分离了计算和存储,便于后续独立扩容存储容量或接入 CDN 加速。
分步处理
第一步:购买并配置对象存储
在阿里云、腾讯云或七牛云控制台创建存储桶(Bucket),区域建议选择靠近服务器所在地。记录 Endpoint 域名、AccessKey ID 和 AccessKey Secret。设置 CORS 规则允许论坛域名访问,避免浏览器跨域拦截。
第二步:安装存储插件
进入 Discuz! 后台“应用”->“插件”,搜索关键词“OSS”。下载前查看“适用版本”是否匹配当前论坛版本(如 X3.4 或 X3.5)。安装后不要在“全局”->“上传设置”中直接修改远程附件类型为 FTP,而是使用插件提供的独立配置页面。
第三步:迁移旧附件(可选但推荐)
大部分插件提供“历史附件迁移”工具。在低峰期执行迁移,将本地 data/attachment 目录下的文件同步至 OSS。迁移过程中禁止用户发帖,避免新文件写入本地导致不一致。如果无法迁移,需保留本地旧文件目录,仅新文件走 OSS。
第四步:切换存储策略
在插件设置中启用“强制远程存储”。检查论坛前台发帖上传图片,确认上传进度条走完且图片可预览。修改完成后清除 Discuz! 缓存和浏览器缓存。
怎么验证是否生效
检查新上传的图片链接域名是否变为 OSS 域名,而不是本地服务器域名。
查看服务器本地 data/attachment 目录,新产生的附件文件夹应不再增加新文件。观察网站加载速度,图片资源请求状态码应为 200,且响应头中包含 OSS 服务商标识。后台插件状态页应显示“连接正常”或“存储测试成功”。
常见坑
1. 旧链接失效:如果未迁移旧附件且插件强制重写附件 URL,旧帖子图片会挂掉。需确认插件是否支持“新旧分离”策略。
2. 权限配置错误:Bucket 权限设置为私有且未配置签名 URL 时,前台用户无法查看图片。公开读权限需注意防盗链设置。
3. 插件停更风险:第三方插件可能停止维护,导致新版 Discuz 或 PHP 版本不兼容。选择开源仓库活跃或商业支持明确的插件。
4. 费用失控:OSS 按流量和存储收费,未设置带宽上限或防盗链可能导致异常流量产生高额账单。
常见问题
切换 OSS 后会影响 SEO 吗?
图片 URL 域名变更会被搜索引擎视为内容变动,建议配置 301 跳转或保持原有目录结构映射。
本地磁盘空间能立刻释放吗?
只有迁移并删除本地旧文件后才能释放空间,仅配置新文件存储不会自动清理历史数据。
插件收费还是免费?
Discuz! 应用中心既有免费也有收费插件,功能差异主要在迁移工具和完善程度,基础存储功能通常免费。
参考来源
Discuz! 官方网站 - 应用中心插件搜索页面
阿里云 OSS 产品文档 - 绑定自定义域名与 CORS 设置
腾讯云 COS 产品文档 - 权限策略与防盗链配置