【个人网站】12.七牛云私有空间图片访问最佳方案:CDN鉴权、URL签名与防盗链解析
🌐

【个人网站】12.七牛云私有空间图片访问最佳方案:CDN鉴权、URL签名与防盗链解析

published_date
最新编辑 2025年03月17日
slug
如何在个人网站展示七牛云私有空间图片?推荐使用CDN自定义域名+URL鉴权,无需额外后端处理。本文详细解析三种方案:URL签名访问、开启防盗链、后端代理,帮你选择最佳图片访问方式!
short_link
tags
Website
WEBSITE:
GitHub:
 
如果个人网站需要展示七牛云私有空间中的图片,而又不希望服务端额外处理每次请求,可以采用以下更简单的方案来优化访问体验。

方案 1:自定义CDN域名 + URL鉴权(推荐)

原理:可以在七牛云绑定自定义CDN域名,并使用时间戳签名URL访问私有空间图片,无需后端处理请求,前端即可直接访问带签名的图片URL。

具体步骤

绑定CDN域名
  • 进入 七牛云控制台 > 对象存储
  • 选择私有 Bucket,然后点击 绑定自定义CDN域名
  • 绑定自己的域名,例如 img.yourdomain.com
开启URL鉴权
  • CDN 设置 中,启用 URL 鉴权
  • 设置鉴权的 AccessKey 和 SecretKey
前端直接拼接带签名的 URL
  • 生成带时间戳的临时URL,图片可在指定时间内访问

示例代码(Node.js 生成签名URL)

const crypto = require('crypto'); function generateSignedUrl(baseUrl, secretKey, expiresInSeconds = 3600) { const deadline = Math.floor(Date.now() / 1000) + expiresInSeconds; const path = `${baseUrl}?e=${deadline}`; const sign = crypto.createHmac('sha1', secretKey).update(path).digest('base64'); const encodedSign = encodeURIComponent(sign); return `${path}&token=${encodedSign}`; } const baseUrl = 'https://img.yourdomain.com/path/to/image.jpg'; const secretKey = 'your-secret-key'; const signedUrl = generateSignedUrl(baseUrl, secretKey); console.log(signedUrl);
💡
URL 访问原理
  • e=${deadline} 指定了访问有效期,可以控制图片的访问时长。
  • 只要前端请求这个 带签名的 URL,即可访问私有空间中的图片,而无需额外后端支持。
适用场景:需要对图片访问设定有效期,防止外部滥用,同时无需后端额外处理。

方案 2:使用公有空间 + 防盗链(适用于非敏感图片)

如果图片没有敏感信息,可以直接改成公有空间,并开启防盗链,只允许域名访问,防止被其他网站盗链。

具体步骤

  1. 创建公有 Bucket(对象存储空间)
  1. 开启防盗链
进入七牛云控制台 > 防盗链设置
仅允许 yourdomain.com 访问,防止其他网站盗用图片
这样一来,图片 URL 就是直接可访问的,无需签名或额外处理。
适用场景:图片无需严格权限控制,只需防止外部盗用。

方案 3:后端 Proxy 代理访问(不推荐)

如果不想暴露 SecretKey,但仍想访问私有空间图片,可以让后端提供代理 API,前端只请求 API,而不是直接访问七牛云的 URL。

后端 API 示例(Node.js)

const express = require('express'); const app = express(); app.get('/get-image', (req, res) => { const filename = req.query.filename; const signedUrl = generateSignedUrl(`https://img.yourdomain.com/${filename}`, 'your-secret-key'); res.redirect(signedUrl); }); app.listen(3000, () => console.log('Server running on port 3000'));
  • 前端访问:https://yourapi.com/get-image?filename=image.jpg
  • 后端解析请求,生成带签名 URL,然后重定向到七牛云
缺点
  • 增加服务器负担,每次访问都需要后端处理。
  • 响应速度变慢,比直接访问 CDN 慢一层。
🚫 不推荐,除非后端已经有现成的 API 服务器。

最佳方案选择(总结)

方案
适用场景
额外开销
访问体验
✅ 方案 1(URL 鉴权)
需要私有图片访问权限控制
无需后端
快速,CDN 直连
✅ 方案 2(公有空间 + 防盗链)
图片无敏感信息,只需防盗链
无需后端
访问最快
❌ 方案 3(后端 Proxy)
需要隐藏 SecretKey,但仍想访问私有空间
需要额外服务器
访问较慢,不推荐

结论

  • 如果图片对权限要求不高方案 2(公有空间 + 防盗链)
  • 如果必须使用私有空间方案 1(URL 鉴权,推荐)
  • 如果有后端服务器,但不想暴露 SecretKey方案 3(后端 Proxy,代价高,不推荐)
  • 推荐方案:方案 1!前端直接访问,访问速度快,安全性高,最适合个人网站!🚀