Cloudflare CNAME指向AWS S3 Bucket报NoSuchBucket错误求助
解决S3 Bucket通过Cloudflare CNAME访问时的NoSuchBucket错误
出现这个错误的核心原因是:Cloudflare转发请求时,会将Host头设置为你的自定义域名assets.my-site.com,而AWS S3默认会通过Host头的值识别要访问的桶名,所以它会尝试查找名为assets.my-site.com的桶,自然返回不存在的错误。
下面是两种可行的解决方法:
方法1:通过Cloudflare页面规则修改请求Host头
- 登录Cloudflare控制台,找到对应域名进入「页面规则」页面
- 新建规则,匹配路径填写
assets.my-site.com/* - 添加设置项:选择「自定义Host头」,将值设置为你的S3桶完整REST端点域名(例如
bucket-name.s3.amazonaws.com) - 保存规则并等待生效,此时Cloudflare会将请求的
Host头替换为正确的桶域名,S3就能识别到目标桶
方法2:启用S3静态网站托管并匹配域名
- 先将你的S3桶名称修改为
assets.my-site.com(S3静态网站托管要求桶名必须与自定义域名完全一致) - 在S3控制台的桶设置中,启用「静态网站托管」,记录生成的网站端点(例如
assets.my-site.com.s3-website-us-east-1.amazonaws.com) - 在Cloudflare中将CNAME记录
assets.my-site.com指向这个网站端点,而非S3的REST端点 - 确保S3的「阻止公共访问」设置已关闭,且桶策略配置了允许公共读取的权限
补充验证步骤
修改配置后,直接访问assets.my-site.com检查是否能正常加载资源;如果仍有问题,可使用curl -v assets.my-site.com查看请求的Host头是否正确设置为目标桶的域名。
内容的提问来源于stack exchange,提问作者Jason McFarlane
相关产品推荐
相关产品推荐

