使用 Cloudflare R2 + WebP Cloud + PicGo 搭建你的图床

2350 字
12 分钟
使用 Cloudflare R2 + WebP Cloud + PicGo 搭建你的图床

写在前面#

一开始使用了 jsDelivr 加速 Github 图床,但是实际使用中发现有时国内到 jsDelivr 的网络质量仍不稳定,或是存在 DNS 污染,并且使用 Github 作为图床容易污染 commit 记录。于是打算放弃这种依赖纯 CDN 的方式,转向 OSS ,加上刚好有优化博客访问的需求,以及赛博活菩萨 Cloudflare 提供的 10GB/月的免费对象存储服务,最终参考了几篇教程,冻手!

一、Cloudflare R2 有关配置#

1.1 账号注册相关#

Cloudflare 的账号注册我就不多说了,如果要开启 R2 服务,在注册完毕后移步左侧栏的“R2 对象存储”,需要有信用卡或者通过 Palpal(支持国内信用卡/借记卡),Cloudflare 对国内是非常友好的,支持银联和国内手机号,所以这一步基本没什么难度。只要不超出限额就不会扣费,免费容量个人使用的话狠狠造一般都超不了。

1.2 创建 Bucket#

  1. 点击“+创建 Bucket”,设置有关内容,区域根据实际需求选择,这里与之后的 WebP Cloud 保持一致,均选择美西节点。注意实际位置不一定完全保证 Cloudflare 就把该桶分配到该区域。

  1. 创建成功;

现在可以直接往里面上传文件了,对于写作博客这种需求,不可能每次手动打开在线页面往里面扔东西,这里通过继续配置 S3 API ,使之支持通过 PicGo 工具自动上传至 Bucket(见后文)。

1.3 配置域名#

  1. 首先,你需要启用 Bucket 的公共开发 URL,启用后你上传的图片就有公网链接了,设置 →\rightarrow 公共开发 URL →\rightarrow 点击“启用” →\rightarrow 键入“allow”以确认;

  1. 启用成功后会显示一个 r2.dev 结尾的公网地址,至于速率限制,如果你有自定义域名则不必担心;

1.4 自定义域名(可选)#

它提供的公网地址太长且杂乱无章不方便记忆,如果你有自己的域名也可以在设置 →\rightarrow 自定义域 →\rightarrow 点击“添加” →\rightarrow 输入你的自定义域名 →\rightarrow 等待 DNS 解析完成。

举个例子,比如你的域名是 xiaoming.com ,那么自定义域名可以设置为其下的如 test-r2.xiaoming.com 。

等待一段时间后就能生效了,最终的效果应该如下,即公开访问已启用并且公网地址为你的自定义域:

1.5 配置 S3 API#

R2 提供的 S3 API 为客户端工具提供了方便的上传/删除操作,配置步骤如下:

  1. 回到概述页面,点击“{}API” →\rightarrow 管理 API 令牌;

  1. 创建 API 令牌,注意这里选择 Account API 或者 User API 都可以,没有很大区别;

  1. 输入名称,权限选择“对象读和写”,指定你刚才创建的存储桶,保证数据安全性;

  1. 创建后会显示令牌凭据,出于安全原因,这些令牌值不会再次显示,务必做好保存,关闭该页面后无法再查看只能重新创建!

二、PicGo 客户端配置#

2.1 插件安装#

PicGo 本身不支持 S3 对象存储图床,这里通过 PicGo Amazon S3 上传插件解决,直接在 GUI 界面搜索“S3”即可,如果你遇到搜索插件不显示的情况,请参考ISSUE。

如果你安装 s3 没有成功,可以考虑安装 s3-lls ,笔者也没有安装成功,所以以下使用 s3-lls 进行演示,区别是不大的。

2.2 插件配置#

安装成功后,进入“图床设置”,会发现新增了 Amazon S3 选项,点击进入配置:

逐个填入内容,对应关系如下:

  • 应用密钥 ID ↔\leftrightarrow 访问密钥 ID
  • 应用密钥 ↔\leftrightarrow 机密访问密钥
  • 自定义节点 ↔\leftrightarrow 为 S3 客户端使用管辖权地特定的终结点
  • 桶 ↔\leftrightarrow 桶名
  • 文件路径随你自己喜好,我使用的是:{year}/{month}/{fileName}.{extName}
  • 自定义域名:Cloudflare 默认分配的或者你的自定义域名
  • 权限:private ;

其余不填或保持默认即可。

配置完成后,你可以随便上传一张图片测试一下。也可以从 Cloudflare 后台验证上传结果:,顺便验证文件的存储路径是否符合自己的要求,如果你和我一样设置,那么图片的链接应该是:https://自定义域名/2025/07/文件名.png 。

Warning

注:虽然 PicGo 有将图片从相册中删除的功能,但事实上并不会对 Cloudflare 图床中存储的内容进行实际删除。

2.3 安装/配置/上传 FAQ#

笔者在上述过程中事实上也遇到了很多问题,不过最终还是成功解决了。

  1. 安装问题:包括 PicGo 下载已损坏,插件列表搜索无结果,插件安装不成功等。

个人感觉问题主要集中在 Mac 且为苹果系列的 CPU 上。具体请查阅 PicGo 官方的  FAQ 以及被关闭的 issues。

  1. 插件配置问题:picgo-plugin-s3 的作者提供了详细的配置示例;
  2. 图片上传问题:包括图片上传不成功,路径错误等;

笔者在这部分遇到的问题主要是 Nodejs 的一些库的版本问题,升级至对应版本即可解决。并且遇到的问题在 ISSUE 里也没有,所以此处不给出统一解答。如遇上传失败,请截图日志文件,尝试自己解决或者善用 AI 工具,也可以在ISSUE查找是否有类似问题。我如果看到评论区留言也会及时答复。

三、WebP Cloud 配置(可选)#

3.1 WebP Cloud 介绍#

WebP Cloud简单来说这是一个类 CDN 的图片代理 SaaS 服务,可以把图片转换为 WebP/AVIF 格式,减小图像体积,加快网页中图片的加载速度。

  1. 你的网站不直接提供原图 URL,而是把 URL 交给 WebP Cloud;
  2. WebP Cloud 服务器代理请求原图 → 转换为 WebP/AVIF → 进行缓存;
  3. 用户访问时从其分布式节点快速获得优化后的图片;
  4. 类似 CDN,但专注于图片优化分发,而非全站加速;

首先通过 Github 授权登陆该平台,这里就不演示了。其中,免费版本每日提供 3000 个请求额度(相当于能够代理 3000 次图片访问请求),每日签到还有额外额度领!并提供 200M 的图片缓存,这对个人用户完全够用了,而且升级订阅也不算太贵,可以说非常良心了。

如果超出了请求额度也不用担心,访客对博客中图片的访问会被 301 转发到源站图片地址(即你图片的 Cloudflare 公网地址),不经 WebP Cloud 服务压缩,但依然可用;

如果超过 200M 的缓存则会按照 LRU 算法清理。所以不必担心。

具体而言,你可以根据 WebP Cloud 仪表盘的每日统计,选择合适自己的订阅。

3.2 创建代理#

在主页找到并点击“创建代理”:

3.3 配置代理#

  • 代理区域:和 Cloudflare 统一,这里选择美西节点;
  • 代理名称:随便取;
  • 源站地址:与你的 Cloudflare 的自定义域名保持一致;

创建完成后,点击刚才创建的内容,进入基本信息页:

其中,代理地址就是我们图片的代理地址,比如原来的 Cloudflare 链接 https://Cloudflare自定义域名/图片地址 经过代理变为 https://WebP代理地址/图片地址 。

这里的代理地址同样支持使用自定义域名,在你的域名提供商处手动添加一下 DNS 记录即可。

3.4 配置 PicGo#

不需要改别的,只需要将 S3 配置中的自定义域名改为上图的代理地址即可!

3.5 图片压缩配置#

默认图片压缩比率为 80% 。可自行设置

Warning

在配置完成后,你可能会发现访问图片链接后返回的类型仍然是 PNG ,如果确保上述操作无误,一种可能的原因是图片本身太小,转换为 WebP 后的体积大于等于原图,所以直接返回了 PNG 。

3.6 安全性配置#

3.6.1 防止外部网页嵌入#

为防止图片直接或通过 <img> 标签被嵌入外部网站,WebP Cloud 提供了自定义 CORS 头部和 Referer 头限制的选项,具体原理可以参考官方文档。简单来说,你可以把代理 CORS 标头和代理允许的 referer 来源设置为你的博客域名,比如我的 blog.yokumi.cn ,这样外部网页嵌入你的图片将返回 403 或 CORS 错误。

3.6.2 防止 CDN 渗透#

你可以将 User-Agent 设置为自定义的值,这样,User-Agent 可以作为一个预共享密钥,确保源地址只能被 WebP Cloud 访问,从而消除由于猜测源地址而导致的 CDN 渗透问题。

写在后面#

至此,Cloudflare R2 + WebP Cloud + PicGo 就大功告成啦!

参考资料#

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

使用 Cloudflare R2 + WebP Cloud + PicGo 搭建你的图床
https://blog.yokumi.cn/posts/build-your-image-hosting-with-cloudflare-r2-webp-cloud-picgo/
作者
Yokumi
发布于
2025-07-29
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
使用jsDelivr加速Github图床
开发心得对于个人博客,图片如果保存在本地,迁移时总是不太方便。一种比较好的方式就是使用图床,无需再担心迁移时的麻烦。像腾讯云、阿里云和七牛云等厂商都提供稳定但收费的 OSS 对象存储服务,国内免费的图床也有,不过多数有上传限制,或存在不稳定的因素(毕竟公益运营,存在跑路可能性),并且有些会对图片内容的合规性进行检测(比如二维…
2
博客美化记录
开发心得众所周知, 一个好的前端/排版是继续做下去的动力(bushi) 。 难得有空,继续来建设一下博客,简单美化一下前端。 引入自定义的 JS/CSS/HTML 是继续下列美化操作的条件,可以通过以下主题配置(楼主使用的是 Fluid 主题,不同主题之间可能存在一些差异)。你可以在配置文件中找到:
3
如何在 Hexo 博客中插入伪代码
开发心得在技术博客中,优雅地展示算法伪代码是常见需求。但是 Hexo 本身并不支持 的,Hexo 默认只支持常规代码高亮,无法直接渲染算法伪代码。当然,Hexo 提供丰富的插件,但是我搜索后并没有找到相关的(如果是我遗漏了,可以在评论区指出)。 所以,自行摸索后,找到以下的替代方法:
4
第一台 VPS 折腾小记
开发心得在使用本项目/教程/脚本之前,请务必仔细阅读以下声明。一旦您开始使用、复制或修改相关内容,即视为您已完全接受并同意本免责声明的所有条款。 请谨记:使用技术时请务必遵守您所在国家和地区的法律法规。 使用 IPv6-only VPS 低成本独享家宽,解锁 ChatGPT 不风控
5
2026.5 Live Repo
生活杂谈翻了翻相册才发现上一次已经是去年 9 月的羊文学了,哎gszm坏事做尽。 这回的出行方式是经典京沪高铁二等座,去年锅贴得意之作绿皮 D9 真给我坐麻了,这次果断 G 系列。不过被课表背刺,本来还可以买早一班(),结果就是快 0 点才到虹桥。好像是第一次这么晚到沪国。

评论区

文章目录