2026年9月30日 · 阅读约 5 分钟

如何公开 Cloudflare R2 存储桶

R2 存储桶默认是私有的。在你明确为存储桶设置公开地址之前,没有签名的 API 请求就无法读取任何文件。设置方法有两种,而且可以同时使用。

方法一:绑定自定义域名(推荐)

自定义域名会通过 Cloudflare 网络提供存储桶内容并进行缓存,以后还可以使用 WAF 规则或 Cloudflare Access。该域名必须是与存储桶同一 Cloudflare 账号下的一个 zone(完整设置或部分 CNAME 设置均可)。

  1. 在 Cloudflare 控制台中进入 R2 Object Storage,选择你的存储桶。
  2. 打开 Settings,找到 Custom Domains,然后选择 Add。
  3. 输入一个子域名,例如 files.example.com,然后选择 Continue。
  4. 检查 Cloudflare 将要创建的 DNS 记录,然后选择 Connect Domain。

几分钟内,状态就会从 Initializing 变为 Active。之后,键为 2026/09/report.pdf 的对象即可通过 https://files.example.com/2026/09/report.pdf 访问。

方法二:启用 r2.dev Public Development URL

如果只是快速测试,R2 可以为存储桶分配一个由 Cloudflare 管理的地址:

  1. 打开存储桶的 Settings。
  2. 在 Public Development URL 下选择 Enable。
  3. 输入 allow 确认,然后选择 Allow。

现在可以通过 https://pub-<id>.r2.dev/<key> 访问存储桶。Cloudflare 会对该 URL 限速,并表示它仅供开发使用,所以在广泛分享链接之前,请换成自定义域名。不支持把你自己的 CNAME 指向 r2.dev 地址。

公开访问会暴露什么,不会暴露什么

  • 只读。公开访问只允许任何人读取他们知道键名的对象。上传和删除仍然需要 API 凭证。
  • 不会列出目录。访问域名根路径不会列出存储桶内容。随机的对象名称让链接难以被猜到。
  • 整个存储桶都会公开。访问权限按存储桶设置,而不是按文件夹。私有文件请放在另一个存储桶中。
  • 缓存。默认情况下,Cloudflare 只缓存特定扩展名的文件。如果希望缓存所有文件类型,请添加缓存规则。

解决 R2 链接的 Access Denied 错误

如果链接返回 Access Denied、401 或 403,请按顺序检查:

  1. 链接使用的是你的自定义域名或 r2.dev URL,而不是 <account-id>.r2.cloudflarestorage.com。该主机是 S3 API,始终需要签名。
  2. 自定义域名显示为 Active,并且在存储桶设置中,对存储桶的访问为 Allowed。
  3. URL 中的键与对象完全一致,包括文件夹和大小写。

常见问题

公开 R2 存储桶安全吗?

对于你本来就要分享的文件来说是安全的。拿到链接的人可以读取该文件,但无法列出存储桶、上传或删除。私有数据请放在另一个存储桶中。

公开 R2 存储桶会增加费用吗?

不会。R2 不收取出站流量费,所以公开下载不会增加带宽成本。读取计为 B 类操作,每月有免费额度。

可以只公开一个文件夹吗?

R2 的公开访问做不到,它作用于整个存储桶。请使用单独的存储桶,或让存储桶保持私有,分享预签名 URL。