私有云存储安全加速与防盗链中转方案

三月 28, 2026 / Kaelen / 32阅读 / 0评论

1. 方案架构图

本方案通过 Nginx 作为中转网关,屏蔽存储原站(OSS/S3 等)地址,利用后端程序的动态签名机制实现极高安全性的资源访问。

访问链路:

用户浏览器 <——> Nginx 中转服务器 (cdn.example.com) <——> 私有对象存储 (OSS/S3)


2. Nginx 中转配置(全量模板)

在 Nginx 中,通过校验 Sec-Fetch-DestReferer 实现行为级拦截,并强制浏览器不缓存敏感文件的授权状态。

Nginx

server {
    listen 80;
    listen 443 ssl;
    listen [::]:443 ssl;
    listen [::]:80;
    server_name example.com; # 替换为你的域名

    location / {
        # --- 核心转发:指向 OSS 外网域名 ---
        proxy_pass http://your-bucket.oss-cn-region.aliyuncs.com;
  
        proxy_set_header Host your-bucket.oss-cn-region.aliyuncs.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # --- 缓存配置 ---
        proxy_cache your_cache_zone; # 替换为你的缓存空间名
        proxy_cache_valid 200 1h; 
        proxy_cache_key $host$uri$is_args$args;
        add_header X-Cache-Status $upstream_cache_status;
  
        add_header Cache-Control "public, max-age=3600";
    }

    # SSL 基础配置
    http2 on;
    if ($scheme = http) {
        return 301 https://$host$request_uri;
    }
    ssl_certificate /etc/nginx/ssl/fullchain.pem; # 替换为实际证书路径
    ssl_certificate_key /etc/nginx/ssl/privkey.pem; # 替换为实际私钥路径
    ssl_protocols TLSv1.3 TLSv1.2;
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497 https://$host$request_uri;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
}

3. 存储策略与动态签名设置

仅靠 Nginx 拦截 Referer 是不够的,核心安全在于存储策略的“签名 URL”。

3.1 存储原站设置

  • 访问权限:必须设置为 “私有”(Private)。禁止任何不带签名的直接访问。
  • 跨域 (CORS):在存储后台设置允许的 Origin(如 https://cloud.example.com)。

3.2 业务系统设置

在业务系统(如 Cloudreve 或其他网盘程序)中进行如下配置:

  • CDN 域名:填写 Nginx 中转域名 https://cdn.example.com
  • 安全链接/签名 URL
    • 开启状态:开启(强制所有外链带 Signature 参数)。
    • 有效期:建议设置为 60~300 秒。短时效链接即使被抓包,也会在极短时间内失效。

4. 防御逻辑分析

防护维度 实现逻辑 攻击者视角
物理阻断 OSS 私有读写 直接访问原站 URL,OSS 提示 AccessDenied
时效锁定 动态签名 URL 拿到带签名的 URL 转发给别人,1 分钟后链接自动作废。
行为识别 Sec-Fetch-Dest拦截 在浏览器地址栏输入图片 URL,Nginx 直接返回 403。
来源锁定 valid_referers 在其他网站盗链使用 <img>标签,Nginx 校验失败。
零信任缓存 no-cache响应头 浏览器无法“记忆”访问权限,每次打开文件都必须经过服务器实时审查。

5. 运维注意事项

在更新 Nginx 配置或修改签名规则后,由于 Nginx 磁盘缓存可能存有旧的授权记录,建议执行以下清理命令:

Bash

# 物理清理缓存目录(路径需对应配置)
rm -rf /www/sites/cdn.example.com/cache/*

# 重载 Nginx 服务
nginx -s reload

这份文档已经完全去标识化。如果你的 Cloudreve 后台版本更新导致界面变化,只需要记住核心逻辑:开启签名、缩短有效期、并在 Nginx 中透传 $args 参数即可。

文章作者:Kaelen

文章链接:https://kaelen.top/archives/wei-ming-ming-wen-zhang-nSnzD5wA

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议,转载请注明出处!


评论