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:使用公有空间 + 防盗链(适用于非敏感图片)
如果图片没有敏感信息,可以直接改成公有空间,并开启防盗链,只允许域名访问,防止被其他网站盗链。
具体步骤
- 创建公有 Bucket(对象存储空间)
- 开启防盗链
进入七牛云控制台 > 防盗链设置
仅允许 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!前端直接访问,访问速度快,安全性高,最适合个人网站!🚀
Table of Contents