Discuz! 附件异地存储与 Nginx 智能转发自动化部署手册

2026-04-05/技术/lz1473 OLEOU/

架构思路

本方案采用 “本地存储热数据(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 {} \;

关键提示

  1. 清理缓存:配置完成后必须清理 Cloudflare 边缘缓存和 Redis 缓存,否则跳转规则不生效。

  2. 安全防护:OSS 端建议开启 Referer 白名单防盗链。


评论列表
正在加载评论…
邮箱
验证码