前言

一直想给Twikoo部署个图床,但是国内的图床价格又高,如果部署在服务器上又觉得服务器的硬盘容量太小,到时候塞的满满的扩容又麻烦又要花钱,只能再次白嫖一下Cloudflare了。

部署

第一步:开启Cloudflare R2

R2的开启需要绑定一张信用卡(银行卡?)因为我本身就绑定了一张,就不介绍了。

来到Cloudflare控制台的R2对象存储,一路开通即可。

可以看到三项免费的额度,针对这三项,下文我将针对性的说明如何防范。

第二步:创建存储桶

点击界面右上角的创建存储桶:

  • 存储桶名称: twikoo-image(任意)

  • 位置: 自动,或者选择 亚太地区

  • 默认存储类: 必须选择标准

网上查了点资料:Cloudflare 的 10GB 免费额度 **仅仅适用于“标准 (Standard)”存储类**。 如果选择了“不频繁访问”,那么**没有免费额度**,从存入第一张图片开始,就会按每 GB 每月 0.01 美元开始计费。
![](https://www.luxiyue.com/wp-content/uploads/2026.04.07-Cloudflare.R2Storage.twikoo.03.png)

顺便 创建自定义域 ,来到存储桶的设置界面,点击 自定义域 右侧的 添加 按钮,添加绑定在Cloudflare的子域名:

第三步:获取API令牌

在界面的 Account Details - API Tokens ,点击 Manage :

创建 帐户 API 令牌

  • 令牌名称: Twikoo-Image-Token(任意)

  • 权限: 对象读和写: 允许读取、写入和列出特定存储桶中的对象。

  • 指定存储桶: 选择上一步创建的存储桶

创建后记录页面上的相关信息。

第四部:配置twikoo图床

来到twikoo的管理界面:

Twikoo 后台设置项 对应你获取到的内容
IMAGE_CDN 选择 S3 / R2 / MinIO
S3_REGION 可不填
S3_BUCKET 存储桶名称(比如 twikoo-image
S3_ACCESS_KEY_ID 访问密钥 ID
S3_SECRET_ACCESS_KEY 机密访问密钥
S3_ENDPOINT 终结点
S3_CDN_URL 自定义域名(比如 https://img-twikoo.luxiyue.cn

保存后即可。

测试

完美!

安全防范(重要‼️)

一、 存储

存储总量为10G,可以说非常足,正常情况下,存储几千张图片才能存满,可以说基本不用担心。

根据上传图片多少进行定时清理即可,可以优化的内容为:

  1. 如果是通过nginx或者apache2部署的,配置上传文件大小限制,可以为2M,5M等;

  2. Cloudflare本身对于免费用户来说,在开启小黄云状态下,文件也限制在100M;

  3. Twikoo程序本身作为用 Node.js 写的应用,解析表单数据(图片)的中间件往往有默认的大小限制(很多 Node 框架默认是 1MB 或几 MB,Twikoo未查资料验证)

二、A类操作

100万次操作/月免费,每增加 100 万次操作收取 4.50 美元。

A类操作可以简单理解为上传等请求次数。

最简单有效的是开启 Rate Limiting(速率限制) ,阻断脚本狂刷。

进入 Cloudflare 控制台 -> 你的域名 -> Security (安全性) -> 安全规则 -> 创建规则:Rate limiting rules (速率限制规则)。

三、B类操作

1000万次操作/月免费,每增加100万次操作收取 0.36 美元。

B类操作可以简单理解为访问、读取的请求次数。

正常情况下访问图片,由于有缓存的关系,只要缓存了,第二次就不计次数,但是架不住有人瞎搞,在图片链接后面疯狂加随机参数,导致每次都去拉去原始图片。

针对性防御方案:忽略查询字符串

  1. 进入 Cloudflare 控制台 -> 你的域名 -> 规则 (Rules) -> 页面规则 (Page Rules) -> 创建页面规则

  2. URL 匹配:填入 *img.yydnas.cn/* (把域名换成你的自定义域名)。

  3. 选择设置:找到 缓存级别 (Cache Level)

  4. :选择 忽略查询字符串 (Ignore Query String)

  5. 保存并部署。

账单预警

最后再配置一下账单的预警,点击 头像 - 账单 - 可计费使用量通知 ,选择 【账单 根据使用情况计费 计费使用量超过了您为特定产品配置的阈值】。

然后分别针对产品设置三项:

产品 名称 免费额度 (每月) 建议预警阈值
R2 Storage 存储空间 10 GB 5000000000(5G)
R2 Storage Class A Operations 写入/上传 (A类) 100 万次 500,000 次 (50%)
R2 Storage Class B Operations 读取/下载 (B类) 1,000 万次 5,000,000 次 (50%)

这样其实就比较稳妥了,最后其实也可以算一下,就算是整体都超过一倍,总体费用其实相当于大概8美元左右,60元人民币不到,不会第二天直接卖车卖房的程度。。。

完全可以放心使用。

最后

Twikoo只是一个后端的评论功能,是用来给用户发表评论、分享观点的,既然开发了这个功能,那么就试着理解、使用这些功能,毕竟现在人们素质提高了,也不会很多人花那么多精力就为了让你损失几十块钱,吃了不讨好的事情没有意义。

另外,这个方法不需要第三方的控制界面,仅仅是调用API显示图片,如果需要上传等功能实现,还是建议在Github找一个开源的项目,通过Cloudflare Workers进行部署。