使用 Cloudflare 访问带有通配符记录子域的 AWS S3

Use Cloudflare to access AWS S3 with wildcard record subdomain

我正在尝试按照 this article on cloudflare 了解如何通过子域获取 Amazon S3 资产。

当我使用 DNS 手动定义特定子域时,它按预期工作,如下所示:

CNAME ----- assets ------ fullpage.sites.s3-website-us-west-1.amazonaws.com --- 橙色云图标

然后我可以在使用时访问我的亚马逊文件: https://assets.example.com

但是,我想使用通配符,这样每个子域都可以重定向到我的 Amazon S3 存储桶中的一个文件夹。我不想手动定义这些子域,因为这是我的网络用户将在他们的网络应用程序中生成的内容。

因此,我使用通配符 NAME 添加了以下记录。 CNAME ----- * ------ fullpage.sites.s3-website-us-west-1.amazonaws.com --- 灰色云图标

请注意,我不允许使用 "orange cloud icon"(代理),我不得不使用灰色的(仅限 DNS)

现在 URL 按预期停止工作: https://assets.example.com

我收到 aws 错误:

404 Not Found

  • Code: NoSuchBucket
  • Message: The specified bucket does not exist

怎么回事?

我该如何解决这个问题?

注意非通配符 CNAME 记录如何在右侧有一个橙色的云图标并显示 "Proxied"。这意味着对此主机名的请求首先由 Cloudflare 处理,包括例如运行 Cloudflare Workers 重写 URL.

不过,您的通配符主机名显示为 "DNS only"。这意味着主机名被设置为直接指向 AWS 的 IP 地址;请求不会首先转到 Cloudflare。 AWS 不希望收到对您的主机名的请求,因此它 returns 看到它们时会出现 404 错误。

不幸的是,Cloudflare 仅支持代理企业帐户的通配符主机名,因此您对此无能为力,除非您想升级到企业合同,该合同的起价通常为每月几千美元左右。