架构思路
本方案采用 “本地存储热数据(7天内)+ 云端存储全量数据(永久)” 的冷热分离模式。通过 Nginx 逻辑判断文件是否存在,实现本地缺失文件自动跳转至杭州 OSS,兼顾了新帖访问速度与老帖存储成本。
title="Discuz! 附件异地存储与 Nginx 智能转发自动化部署手册"
步骤 1:环境准备与 ossutil 安装
在服务器安装阿里云官方工具,打通与杭州 OSS 的同步隧道。
Bash
curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
# 配置 Endpoint、AK/SK,并将 OSS 设为“公共读”
ossutil config
步骤 2:Nginx 智能调度逻辑
修改 Nginx 站点配置文件,实现“本地优先,缺失跳云端”的逻辑判断。
Nginx
location ~* ^/data/attachment/(.*)$ {
set $local_file /www/wwwroot/你的域名/data/attachment/$1;
if (!-f $local_file) {
rewrite ^/data/attachment/(.*)$ https://你的桶.oss-cn-hangzhou.aliyuncs.com/目录/$1 redirect;
}
root /www/wwwroot/你的域名;
expires 30d;
}
步骤 3:自动化增量同步(宝塔计划任务 A)
设置每 5 分钟执行一次,确保新发的图片实时备份到云端。
Bash
ossutil cp -r /www/wwwroot/你的域名/data/attachment/ oss://你的桶/目录/ --parallel=50 --update
步骤 4:本地硬盘收割(宝塔计划任务 B)
设置每天执行一次,自动删除本地 7 天前的旧文件,确保服务器硬盘不爆满。
Bash
#!/bin/bash
ATTACH_DIR="/www/wwwroot/你的域名/data/attachment"
# 先同步补漏,再执行清理
ossutil cp -r $ATTACH_DIR/ oss://你的桶/目录/ --parallel=50 --update
find $ATTACH_DIR -type f -mtime +7 -exec rm -f {} \;
关键提示
-
清理缓存:配置完成后必须清理 Cloudflare 边缘缓存和 Redis 缓存,否则跳转规则不生效。
-
安全防护:OSS 端建议开启 Referer 白名单防盗链。