从 GitHub 到 Cloudflare R2:图床迁移踩坑记录
作为一个前端开发者,图床就像后勤补给站。我曾以为 GitHub + jsDelivr 是白嫖的终点,也曾幻想国内云厂商的免费额度能让我躺平。但在 2026 年,被现实反复毒打之后,最终找到了真正靠谱的方案——Cloudflare R2。
那些年踩过的图床坑
国内免费存储的备案墙
我试过多吉云 (DogeCloud),贪它那 20GB 的国内极速流量。
测试域名有效期只有 30 天,限制极多。国内云服务的尽头终究是 ICP 备案,没有备案域名就只能在试用期里转圈。
GitHub + jsDelivr 的抽风问题
这是最经典的方案,也是最容易踩坑的。jsDelivr 节点在国内经常处于半残状态,稳定性看天吃饭。GitHub 是用来存代码的,仓库大了还会被官方警告のだ。
为什么选 Cloudflare R2?
对比了阿里云 OSS、腾讯云 COS 和各类第三方图床之后,选 R2 的理由很直接:
- 每月 10GB 免费存储,极高的 B 类操作额度,对个人博客来说基本够用。
- 绑自己的域名,全球 CDN。国内直连一般,但配合 Cache Everything 规则,边缘节点缓存后基本能秒开。
- 兼容 S3 协议,PicGo、Rclone、AList 直接对接,无需额外适配。
迁移过程的几个连环坑
路径匹配问题
把 GitHub 仓库改私有、换 R2 域名之后,博客图片全炸了。原因很直接:旧文章路径里带着 /gh/username/repo/ 这种 GitHub 专属后缀。解法要么用 VS Code 全局替换路径,要么在 Cloudflare 后台写一条 Transform Rule 做 URL 重写。
RaiDrive 的收费陷阱
想像本地硬盘一样管理 R2,装了 RaiDrive——结果增删改查要开 VIP。直接换 WinFsp + Rclone,配合 --vfs-cache-mode full 参数,本地操作体验和真硬盘差不多,完全免费。
我的配置方案
- 存储:Cloudflare R2(亚太地区机房)
- 分发:R2 自定义域名 + Tiered Cache(分层缓存)+ HTTP/3
- 缓存规则:强制
Edge Cache TTL为 1 个月,图片死在边缘节点上加速 - 管理:Rclone 挂载为本地
Z:盘,写完博客直接拖拽上传
小结
图床的核心不是堆方案,是减少麻烦。减少不必要的国内分流,减少复杂的同步 Actions,减少对云厂商”免费试用”的依赖。R2 + 强力缓存这套组合,目前来看最省心。
后记:如果你还在 GitHub 的泥潭里挣扎,迁移成本不高,但省掉的心力不少 😅
硬核实操:从零配置 R2 工具链
第一阶段:Cloudflare R2 开荒
登录 Cloudflare 控制台,进入 R2 → Create bucket。名字随意(比如
blog-img),位置选 Automatic。回到 R2 概览页,点右侧的 Manage R2 API Tokens → Create API token,权限选 Edit。
生成后立刻保存
Access Key ID和Secret Access Key,关了页面就永远消失了。在桶的 Settings 里绑你的域名(比如
img.yourdomain.love)。CORS 不配会 403。在 CORS 策略里填:
1
2
3
4
5
6
7[
{
"AllowedOrigins": ["*"],
"AllowedMethods": ["GET", "POST", "PUT"],
"AllowedHeaders": ["*"]
}
]
第二阶段:Rclone 挂载
去 rclone.org 下载,把
rclone.exe路径加到环境变量。打开 PowerShell,输入
rclone config,按以下顺序操作:n— New remote- name:输入
r2 - Storage:选
s3 - provider:选
Cloudflare - env_auth:输入
false - access_key_id:填 R2 Access Key
- secret_access_key:填 R2 Secret Key
- region:输入
auto - endpoint:填 S3 API 地址(格式
https://<account_id>.r2.cloudflarestorage.com) - location_constraint:回车
- acl:回车
- Edit advanced config:
n - Keep this remote:
y q退出
挂载命令:
1
rclone mount r2:blog-img Z: --vfs-cache-mode full --cache-dir "C:\r2cache" --vfs-read-chunk-size 128M --vfs-read-chunk-size-limit off --header "Referer:https://www.lolimama.love/"
参数说明:
r2:blog-img:配置名 + 桶名Z::挂载盘符--vfs-cache-mode full:本地缓存层,增删改查不会因网络波动卡死--cache-dir:缓存路径
把挂载命令写成
.bat文件,丢进shell:startup启动文件夹。连
.bat那一下闪烁都不想看的话,可以用 VBScript 包裹:1
2Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c C:\你的路径\mount_r2.bat", vbhide另存为
silent_mount.vbs,放进shell:startup,把.bat从里面移走。开机后Z:盘会直接出现。
附加建议
国内速度慢的话,在 Cloudflare 的 Caching 页面开启 Tiered Cache,边缘节点会互相缓存,能快一些。
防盗链:在 WAF 里设规则,只允许来自你博客的 Referer 访问图片。
挂载窗口关掉后盘就消失了。建议用 nssm 把 Rclone 封装成系统服务,开机自启才算真正稳定。










