免费图床不求人:用 Cloudflare R2 + PicGo 打造稳定图床方案

引言
说实话,这两年图床真是让我折腾够呛。 还记得2023年那会儿,我把博客图片都托管在 GitHub,配合 jsDelivr CDN 用得还挺香。结果有一天突然发现,博客里的图片全变成了裂图——jsDelivr 在国内被封了。看着几十篇文章里一片片空白,我心都凉了。 后来试过好几个免费图床,要么莫名其妙删图,要么直接停服跑路。七牛云、阿里云OSS 虽然稳定,但国内的要备案,还有超额收费的风险。老实讲,我真的不想再经历一次迁移图床的痛苦了。 直到我发现了 Cloudflare R2。 这个对象存储服务有 10GB 免费空间、每月 100 万次上传、1000 万次读取,关键是出口流量完全免费。用了半年下来,一分钱没花,访问速度也还不错。配合 PicGo 实现一键上传后,体验真的很丝滑。 不过说真的,第一次配置 R2 的时候我也踩了不少坑。特别是公开访问设置和 PicGo 的 S3 插件配置,网上的教程参差不齐,参数名称也不统一,试了好几次才成功。 所以这篇文章,我把整个搭建过程完整梳理一遍,手把手教你:
- 为什么 R2 是目前最值得选择的免费图床方案
- 如何正确配置 R2 的公开访问(避开常见陷阱)
- PicGo 怎么连接 R2(傻瓜式配置,一次成功) 如果你也在为图床问题头疼,跟着这篇文章走,30 分钟就能搞定。
为什么选择 R2 做图床?
在决定用 R2 之前,我其实对比过挺多方案。这里先聊聊各种免费图床的现状,你就明白为啥我最后选了 R2。
其他免费图床方案的问题
GitHub + jsDelivr:这曾经是最香的方案,但现在已经不行了。jsDelivr 在国内遭到 DNS 污染被封锁,博客图片完全加载不出来。而且说实话,用 GitHub 存图片本来就是一种滥用,每次上传图片都会产生一个 commit,污染提交记录不说,万一哪天账号被封,所有图片就全没了。 免费公共图床(如 SM.MS、路过图床等):这类服务的问题在于不稳定。有些会莫名删除用户图片,有些直接停服跑路。我见过太多博主辛辛苦苦写的文章,因为图床停服全都变成了裂图。免费服务确实香,但你敢把博客的图片资源全押在上面吗? 国内云服务商(七牛云、阿里云 OSS、腾讯云 COS):这些服务确实稳定,七牛云也有 10GB 免费额度。但关键问题是:国内的云服务都要求域名备案。对个人博客来说,备案流程繁琐不说,还有超额收费的风险。虽然成本不算高(超出10GB后大概每月几块钱),但心里总感觉不踏实。
R2 的核心优势
对比下来,Cloudflare R2 真的是目前个人图床的最优解。我用了半年,总结出这几个核心优势: 1. 免费额度超级够用 R2 的免费额度包括:
- 存储空间:10 GB
- 每月上传次数:100 万次(A 类操作)
- 每月读取次数:1000 万次(B 类操作) 对个人博客来说,这个额度绰绰有余。我自己的博客有 100 多篇文章、大概 500 张图片,总共占用不到 2GB 空间。按这个速度,10GB 能用好几年。而且即使真超出了,收费也很便宜:存储 $0.015/GB/月,换算下来 1GB 每月才 1 毛钱人民币。 2. 出口流量完全免费 这是 R2 相比 AWS S3 最大的优势。传统云存储(像 S3、阿里云 OSS)都会对出口流量收费,每 GB 几毛到几块钱不等。如果你的博客访问量大,这个费用可能比存储费还高。 而 R2 的出口流量完全免费。不管你的图片被访问多少次、下载多少次,都不会产生额外费用。这是因为 Cloudflare 利用自己的全球 CDN 网络(100+ 国家、275 个城市)来分发内容,流量都走内部网络,不需要额外收费。 3. 大厂背书,稳定可靠 Cloudflare 是全球最大的 CDN 服务商之一,市值几百亿美元。用它的服务,至少不用担心突然跑路或删图。而且 Cloudflare 一直有”赛博菩萨”的美誉,很多服务对个人用户都特别友好。 4. 兼容 S3 API,未来可迁移 R2 完全兼容 AWS S3 的 API 标准。这意味着如果将来你想迁移到其他支持 S3 协议的服务(比如 MinIO、阿里云 OSS),只需要改改配置,不用重写代码或工具。这种灵活性让你不用担心被厂商锁定。 5. 无需备案,开箱即用 R2 是国际服务,绑定自己的域名不需要备案。注册 Cloudflare 账号、开通 R2、配置完成,全程 30 分钟搞定。这对个人博客主来说真的太友好了。
一个小提醒
R2 唯一需要注意的是:开通服务需要绑定信用卡或 PayPal。这只是为了验证身份,不会自动扣费。我当时也犹豫了一下,但绑定后发现确实只是验证,用了半年没产生过一分钱费用。如果你实在担心,可以用虚拟信用卡,或者绑定国内的 PayPal(也是支持的)。 好了,说了这么多优势,接下来咱们正式开始搭建。
R2 图床搭建详细步骤
好,现在进入实战环节。我会把每一步都讲清楚,跟着操作就行。
第一步:注册并开通 R2 服务
首先你得有一个 Cloudflare 账号。如果还没有,去 Cloudflare 官网 免费注册一个,填个邮箱和密码就行,很简单。 注册登录后,在左侧边栏找到「R2 对象存储」,点进去。如果是第一次使用,会提示你开通服务。 重点来了:开通 R2 需要绑定支付方式(信用卡或 PayPal)。 这里要特别说明一下,很多人看到这步就退缩了,我当时也犹豫。但其实这只是为了验证身份,不会自动扣费。Cloudflare 的免费额度是真免费,只有你主动超出额度并确认付费才会扣钱。 你可以绑定:
- 支持外币的信用卡(Visa、MasterCard 都行)
- PayPal(国内的 PayPal 也支持)
- 虚拟信用卡(担心安全的话可以用这个) 绑定完成后,点击「开通 R2 服务」,几秒钟就好了。
第二步:创建存储桶(Bucket)
开通 R2 后,点击右上角的「创建存储桶」按钮。 存储桶名称:起一个有辨识度的名字,比如 blog-images、my-pics 之类的。注意这个名字是全局唯一的,如果重名了需要换一个。 位置选择:这里有个小技巧。 很多教程会无脑推荐选「亚太地区(APAC)」,理由是离国内近、速度快。但其实不一定。我试过两个位置,发现:
- 亚太地区:国内访问确实快一些,但国际访问速度受限
- 北美西部(WNAM):配合 Cloudflare 的 CDN,全球访问速度都比较均衡,国内速度也能接受 我个人选的是北美西部,因为博客可能有国外读者,综合体验更好。你可以根据自己的受众情况选择。 存储类:选择「标准(Standard)」就行。 然后点击「创建」,几秒钟后存储桶就建好了。
第三步:配置公开访问(关键步骤)
创建好存储桶后,进入存储桶的设置页面。接下来这一步很关键,也是很多人容易卡住的地方。 R2 默认是私有的,要让图片能被公开访问,有两种方式: 方式一:启用 r2.dev 子域名(适合测试) 这是最简单的方式,适合刚开始测试用。
- 在存储桶设置页面,向下滚动找到「R2.dev 子域」
- 点击「允许访问(Allow Access)」
- 在弹出的确认框中输入
allow,然后点击确认 完成后,Cloudflare 会给你生成一个公开访问 URL,类似:
https://pub-xxxxx.r2.dev但是!这里有个重要的坑:r2.dev 子域名有访问速率限制,只适合开发测试用。如果你的博客访问量大,很容易触发限制导致图片加载不出来。Cloudflare 官方也明确说了,生产环境必须用自定义域名。 我第一次配置的时候没注意这点,结果博客访问量稍微大一点,图片就加载失败。后来才改成自定义域名,血泪教训啊。 方式二:绑定自定义域名(生产推荐) 如果你有自己的域名,强烈建议用这种方式。不仅没有速率限制,还能配置缓存、防盗链等高级功能。 前提条件:你的域名已经托管到 Cloudflare(也就是把域名的 DNS 服务器改成 Cloudflare 的)。如果还没托管,去 Cloudflare 控制台添加域名,按提示修改 DNS 服务器就行,免费的。 配置步骤:
- 在存储桶设置页面,找到「自定义域(Custom Domains)」
- 点击「添加(Add)」
- 输入你想用的子域名,比如
img.yourdomain.com - 点击「继续(Continue)」
- Cloudflare 会自动在你的 DNS 记录里添加一条 CNAME 记录
- 点击「连接域名(Connect Domain)」 等待几分钟 DNS 生效,你的自定义域名就可以用了。以后访问图片的 URL 就是:
https://img.yourdomain.com/path/to/image.png我自己用的就是自定义域名,配合后面讲的缓存策略,既稳定又快速。
第四步:创建 API 令牌
配置好公开访问后,还需要生成 API 密钥,这样 PicGo 才能连接到 R2 上传图片。
- 回到 R2 的「概述(Overview)」页面
- 点击右上角的「管理 R2 API 令牌(Manage R2 API Tokens)」
- 点击「创建 API 令牌(Create API Token)」
- 给令牌起个名字,比如
PicGo-Upload - 权限这里选择「对象读和写(Object Read & Write)」
- 点击「创建 API 令牌」 超级重要! 创建完成后,Cloudflare 会显示三个信息:
- 访问密钥 ID(Access Key ID)
- 访问密钥(Secret Access Key)
- S3 API 端点(类似
https://xxxxx.r2.cloudflarestorage.com) 这三个信息只会显示一次!关闭页面后就再也看不到了。一定要立即复制保存到安全的地方,比如密码管理器或者本地加密文件。 如果不小心关掉了,只能删除令牌重新创建。我第一次就是手快关掉了,又重新创建了一遍,别学我。 小贴士:S3 API 端点也可以在「概述」→「通过 S3 API 使用 R2」里找到,就是那个 HTTPS 开头的网址。 好了,R2 这边的配置就完成了。接下来配置 PicGo。
PicGo 配置实战
PicGo 是一个开源的图片上传工具,支持各种图床服务。配置好之后,你就可以直接拖拽图片上传,自动生成 Markdown 格式的图片链接,超级方便。
第一步:安装 PicGo 和 S3 插件
下载 PicGo 去 PicGo 官网 或 GitHub Release 页面下载对应系统的安装包:
- Windows:下载
.exe文件 - macOS:下载
.dmg文件 - Linux:下载
.AppImage文件 安装很简单,按提示一路下一步就行。 进阶推荐:PicList 如果你想要更多功能,推荐用 PicGo 的二开项目 PicList。它在 PicGo 基础上增加了: - 图片管理功能(可以查看、删除已上传的图片)
- 图片压缩(有损/无损)
- 格式转换(转 WebP 等)
- 添加水印 我自己现在用的就是 PicList,功能更全面。安装方法和 PicGo 一样。 安装 S3 插件 PicGo 默认不支持 S3 协议,需要安装插件。
- 打开 PicGo,点击左侧的「插件设置」
- 在搜索框输入
s3 - 会看到几个插件,推荐安装
picgo-plugin-s3或s3-lls(两个都行,功能差不多) - 点击「安装」,等待安装完成 注意:插件安装需要 Node.js 环境。如果安装失败,可能是因为:
- 网络问题(插件从 GitHub 下载,国内可能慢)
- 没有 Node.js 环境(去 Node.js 官网 下载安装)
- 权限问题(Windows 用户可能需要管理员权限) 如果实在装不上,可以试试离线安装,或者换个网络环境(比如开个梯子)。
第二步:配置 S3 图床参数
插件安装好后,点击左侧的「图床设置」,找到「Amazon S3」(或者叫「AWS S3」),点击进去配置。 接下来这部分很关键,每个参数都要填对,我一个个讲清楚。 应用密钥 ID(Access Key ID) 填入之前在 R2 创建 API 令牌时保存的「访问密钥 ID」。 应用密钥(Secret Access Key) 填入「访问密钥」。 注意这两个密钥别填反了,ID 是一串比较短的字符,密钥是一串更长的字符。 桶(Bucket Name) 填入你在 R2 创建的存储桶名称,比如 blog-images。 注意是桶的名称,不是 ARN,也不是 URL,就是你创建时起的那个名字。 文件路径(Upload Path) 这个决定上传的图片在存储桶里怎么组织。推荐几种格式:
{year}/{month}/{md5}.{extName}- 按年月分类,文件名用 MD5 避免重复PicGo/{fullName}- 全部放在 PicGo 文件夹下,保持原文件名{year}/{month}/{fullName}- 按年月分类,保持原文件名 我个人用的是第一种,既避免了文件名重复,又方便按时间管理。 重要提醒:路径开头不要加/!直接写{year}/{month}/...就行。如果加了/,可能会导致上传失败或路径错误。 自定义节点(Endpoint) 填入之前保存的「S3 API 端点」,就是那个https://xxxxx.r2.cloudflarestorage.com格式的网址。 注意要带https://,不要漏掉。 自定义域名(Custom Domain) 这里填你配置的公开访问域名。根据之前选择的方式:- 如果用自定义域名:填
https://img.yourdomain.com - 如果用 r2.dev:填你的 Public Bucket URL(在 R2 存储桶设置里能看到,类似
https://pub-xxxxx.r2.dev) 这个域名决定了最终生成的图片链接,所以一定要填对。 其他参数 - 区域(Region):随便填,比如
auto或us-east-1,R2 不看这个参数 - 上传方式:选择「路径式」(Path Style)
第三步:测试上传
配置完成后,别急着用。先测试一下是否正常。
- 点击「确定」保存配置
- 勾选「设为默认图床」(这样以后上传会自动用 R2)
- 点击左侧的「上传区」
- 拖入一张测试图片,或者点击「选择图片」上传 如果配置正确,几秒钟后会看到上传成功的提示,并自动复制图片链接到剪贴板。 检查链接:把链接粘贴到浏览器打开,看看图片能否正常显示。如果能看到图片,恭喜你,配置成功了! 常见错误及解决方法 如果上传失败,检查以下几点:
- Access Denied 或 403 错误
- 检查 API 密钥是否填对(别填反了)
- 检查 API 令牌权限是否包含「对象读和写」
- 检查存储桶名称是否正确
- 图片上传成功但无法访问
- 检查是否开启了公开访问(r2.dev 或自定义域名)
- 检查自定义域名是否填对(要带
https://) - 等待几分钟,DNS 可能还没生效
- 上传速度很慢或超时
- 网络问题,R2 在国外,上传可能稍慢
- 图片太大,可以先压缩一下(PicList 自带压缩功能)
- 文件路径错误或出现奇怪目录
- 检查文件路径开头是否加了
/,去掉它 - 检查路径格式是否正确 我第一次配置的时候就是把密钥 ID 和密钥填反了,折腾了半天才发现。如果遇到问题,先仔细检查每个参数,大多数问题都是配置填错了。
- 检查文件路径开头是否加了
优化与进阶技巧
到这里,基本的图床功能已经可以用了。但如果想让图床更稳定、更快速、更省心,还有几个优化技巧值得了解。
设置缓存策略(强烈推荐)
如果你用的是自定义域名,一定要设置缓存规则。这样做有三个好处:
- 减少对 R2 的请求次数,避免超出免费额度
- 加快图片加载速度(从 CDN 缓存直接返回)
- 防止被人恶意刷流量 怎么设置:
- 进入 Cloudflare 控制台,选择你的域名
- 点击左侧「规则」→「页面规则」或「缓存规则」
- 创建新规则,匹配 URL:
img.yourdomain.com/*(替换成你的域名) - 设置:
- 缓存级别:缓存所有内容
- 边缘缓存 TTL:1 个月到 1 年(推荐 6 个月)
- 浏览器缓存 TTL:1 个月 设置好后,图片第一次访问会从 R2 读取,之后都会从 Cloudflare 的 CDN 缓存返回,基本不会再消耗 R2 的读取次数。 我自己设置的是 6 个月缓存,用了这么久,实际产生的 R2 请求次数只有几千次,完全在免费额度内。
国内访问加速(可选)
Cloudflare 的 CDN 在国内速度有点看运气。有些地区还行,有些地区可能比较慢。如果你的博客主要面向国内用户,可以考虑这几种加速方案: 方案一:腾讯云 EdgeOne 腾讯云推出的海外版 CDN,免费、免备案,可以用来加速 R2。
- 优点:国内访问速度快,免费额度够用
- 缺点:需要另外注册腾讯云账号,配置稍微复杂点 方案二:WebP Cloud 一个专门做图片代理和优化的服务,可以自动把图片转成 WebP 格式并缓存。
- 优点:自动压缩图片,节省流量
- 缺点:有请求次数限制,超出需要付费 方案三:国内外分流 用 rclone 工具把 R2 的图片同步到国内云(比如腾讯云 COS),国内用户访问国内图床,国外用户访问 R2。
- 优点:国内外都很快
- 缺点:需要一定的技术能力,维护成本高 说实话,我自己用的是最简单的方法:自定义域名 + 缓存规则。虽然不是最快,但国内加载速度也能接受(1-3秒),对个人博客来说够用了。如果你对速度要求特别高,再考虑加速方案。
安全与防护
图床搭好后,还要注意防止被人滥用。 禁用 r2.dev 访问 如果你已经配置了自定义域名,记得关闭 r2.dev 的公开访问。不然别人可以通过 r2.dev 域名绕过你设置的防盗链等规则。 操作方法:进入存储桶设置 → R2.dev 子域 → 禁止访问(Disallow Access),输入 disallow 确认。 防盗链设置 用 Cloudflare 的 WAF(Web Application Firewall)可以限制只有你的网站能引用图片。 简单设置:
- Cloudflare 控制台 → 安全 → WAF
- 创建自定义规则
- 条件:Referer 不包含
yourblog.com - 动作:阻止或质询 这样别人就无法在自己网站上盗用你的图片链接了。 监控使用量 定期查看 R2 的使用情况,防止超额。 在 R2 控制台可以看到:
- 存储空间使用量
- 每月请求次数(A 类、B 类) 如果发现用量异常增长,及时检查是不是被人刷流量了。
结论
好了,到这里整个 R2 图床的搭建就完成了。 回顾一下我们做了什么:
- 注册并开通 Cloudflare R2,获得 10GB 免费存储空间
- 创建存储桶,配置公开访问(自定义域名或 r2.dev)
- 生成 API 令牌,用于 PicGo 连接
- 安装配置 PicGo,实现一键上传图片
- 设置缓存和安全策略,让图床更稳定 从此以后,你再也不用担心图床删图、跑路或收费了。每次写博客,只要把图片拖进 PicGo,自动上传并生成链接,复制到 Markdown 里就行,整个流程行云流水。 说实话,搭建 R2 图床是我这两年做的最正确的决定之一。虽然第一次配置花了点时间(主要是踩坑),但用上之后真的很省心。现在已经稳定运行半年多,存储了 500 多张图片,一分钱没花,也没遇到任何故障。 如果你也在为图床问题头疼,真的建议试试 R2。按这篇文章的步骤来,30 分钟就能搞定。遇到问题也别慌,大多数都是配置参数填错了,仔细检查一遍就好。 最后提醒一点:配置好之后记得把 API 密钥保存好,万一哪天要重新配置或者换电脑,直接用之前的密钥就行,不用重新生成。 好了,赶紧去搭建你自己的免费图床吧!有问题欢迎评论区交流,我看到会回复的。
发布于: 2025年11月30日 · 修改于: 2025年12月4日


