2026年9月30日 · 阅读约 5 分钟
如何公开 Cloudflare R2 存储桶
R2 存储桶默认是私有的。在你明确为存储桶设置公开地址之前,没有签名的 API 请求就无法读取任何文件。设置方法有两种,而且可以同时使用。
方法一:绑定自定义域名(推荐)
自定义域名会通过 Cloudflare 网络提供存储桶内容并进行缓存,以后还可以使用 WAF 规则或 Cloudflare Access。该域名必须是与存储桶同一 Cloudflare 账号下的一个 zone(完整设置或部分 CNAME 设置均可)。
- 在 Cloudflare 控制台中进入 R2 Object Storage,选择你的存储桶。
- 打开 Settings,找到 Custom Domains,然后选择 Add。
- 输入一个子域名,例如
files.example.com,然后选择 Continue。 - 检查 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 管理的地址:
- 打开存储桶的 Settings。
- 在 Public Development URL 下选择 Enable。
- 输入
allow确认,然后选择 Allow。
现在可以通过 https://pub-<id>.r2.dev/<key> 访问存储桶。Cloudflare 会对该 URL 限速,并表示它仅供开发使用,所以在广泛分享链接之前,请换成自定义域名。不支持把你自己的 CNAME 指向 r2.dev 地址。
公开访问会暴露什么,不会暴露什么
- 只读。公开访问只允许任何人读取他们知道键名的对象。上传和删除仍然需要 API 凭证。
- 不会列出目录。访问域名根路径不会列出存储桶内容。随机的对象名称让链接难以被猜到。
- 整个存储桶都会公开。访问权限按存储桶设置,而不是按文件夹。私有文件请放在另一个存储桶中。
- 缓存。默认情况下,Cloudflare 只缓存特定扩展名的文件。如果希望缓存所有文件类型,请添加缓存规则。
解决 R2 链接的 Access Denied 错误
如果链接返回 Access Denied、401 或 403,请按顺序检查:
- 链接使用的是你的自定义域名或 r2.dev URL,而不是
<account-id>.r2.cloudflarestorage.com。该主机是 S3 API,始终需要签名。 - 自定义域名显示为 Active,并且在存储桶设置中,对存储桶的访问为 Allowed。
- URL 中的键与对象完全一致,包括文件夹和大小写。
常见问题
公开 R2 存储桶安全吗?
对于你本来就要分享的文件来说是安全的。拿到链接的人可以读取该文件,但无法列出存储桶、上传或删除。私有数据请放在另一个存储桶中。
公开 R2 存储桶会增加费用吗?
不会。R2 不收取出站流量费,所以公开下载不会增加带宽成本。读取计为 B 类操作,每月有免费额度。
可以只公开一个文件夹吗?
R2 的公开访问做不到,它作用于整个存储桶。请使用单独的存储桶,或让存储桶保持私有,分享预签名 URL。