我有一个包含数千个 JPG 和类似媒体资产的 Amazon S3 存储桶。(这是我的论坛的存储空间。)我没有在这个存储桶中托管静态站点(没有任何类型的 HTML),它完全开放供公众阅读(因此论坛软件可以链接到图像)。
但是,我在 S3 上为带宽付出了代价。有人说我应该把 CloudFlare 放在 S3 存储桶前面,这样可以节省很多美元。凉爽的!但我不明白这个过程。CloudFlare 似乎想接管我主站点的所有 DNS,这不是我想要的。
我只需要https://my-bucket.s3.us-east-1.amazonaws.com
被 CloudFlare 缓存/CDN。显然我不能改变亚马逊的 DNS ;-)
我认为这并不困难,但我似乎无法找到一个相对简单的解释来说明设置它的正确方法。(换句话说:我缺乏“大图”/主要步骤。)
(这在 CloudFlare 网站上有所介绍,但我对他们的说明感到困惑,而且我的用例也与他们所说的不同。)
以下是让 Cloudflare 为您的 S3 存储桶工作必须采取的步骤列表,稍后我将根据需要尝试详细说明,但这里有很多步骤:
第 1 步:设置基于域的存储桶
注意:此主机名必须稍后加入 Cloudflare(在第 3 步中),因此请根据此选择它。必须使用整个主机名来为存储桶提供服务,所以不要选择已经在使用的东西。我会用
static.example.com
这个。进入 S3 并使用此域的名称创建一个存储桶,您需要选择现有存储桶以及您的图像作为存储桶的复制设置。您将希望存储桶与步骤 2 的现有存储桶位于同一区域:
步骤 1.5(可选):在没有 Cloudflare 的情况下测试自定义域
将测试图像添加
image.jpg
到具有公共查看权限的存储桶中,将其加载到根目录中。将主机名的 DNS 条目 (
static.example.com
) CNAME 到您的 Amazon 存储桶的终端节点。这通常是存储桶的名称(在本例中为static.example.com
)加上包含区域的标准 S3 URL。对于我们的示例,它将是:static.example.com.s3.us-west-2.amazonaws.com
,但替换us-west-2
为您的实际区域。现在查看测试资源是否可用
http://static.example.com/image.jpg
,请确保使用 http,因为 https 在这里不起作用。从上述步骤传播 DNS 可能需要一些时间。第 2 步:复制旧存储桶中的所有资源
您需要按照本指南将所有资源从旧存储桶复制到新存储桶。该指南的深度足以将您的所有资源复制到新存储桶中,但如果您有一个非常大的存储桶,您可能会在此处遇到问题。
验证预期资源是否位于
http://static.example.com/old_image_path.jpg
。第 3 步:注册并设置 Cloudflare
此步骤是将您的域加入 Cloudflare。Cloudflare 对此有一组说明。如果您有任何现有记录,请确保它们在入职列表中。应该存在的一个条目是在步骤 1 中设置的
static.example.com
-> CNAME。static.example.com.s3.us-west-2.amazonaws.com
设置完成后,请确保 DNS 条目处于“橙色云”模式 AKA 代理(和缓存)。从第 2 步再次发出测试请求,但请查看图像是否有来自 Cloudflare 服务器的迹象。这将包括一个
Server: cloudflare
标头以及一个cf-cache-status
标头,该标头指示您是否从 Cloudflare 的缓存中检索并节省带宽。这可能需要一些时间,因为上一步需要更改 DNS 才能传播。此时您应该可以在请求中使用 https,但如果不能,请转到 Cloudflare 的 SSL/TLS > Edge Certificates 选项卡并验证 Universal SSL 是否已启用,或者其他类型的证书是否已正确配置。 注意:您在 Cloudflare 的 SSL/TLS 选项卡中的 SSL 模式必须是“完整”或“灵活”。这会加密用户浏览器和 Cloudflare 之间的图像,但不会加密 Cloudflare 和 AWS 之间的图像。此外,此证书涵盖的所有请求都将在“完整”或“灵活”模式下受到类似的中间人攻击。此处概述的方法不能用于通过 https 提供图像。为此,您需要创建一个Cloudfront 发行版。
第四步:切换图片链接引用
这是特定于原始问题的。所有图像链接引用都必须从旧的 s3 存储桶切换到 Cloudflare 中的新主机名,
static.example.com
.第 5 步:调整缓存设置
您可能需要调整缓存设置以节省带宽。有两种主要方法可以实现这一目标。Cloudflare 将使用 Cache-Control 标头来确定如何确定缓存多长时间。您可以根据这些说明批量更新 S3 缓存控制标头。此外,Cloudflare 为您提供了使用缓存 > 配置 > 浏览器缓存 TTL 选项覆盖此标头的选项。这将有效地修改 Cache-Control: max-age 值修改为两者中的较大者。更长的 TTL 将使图像在用户浏览器中缓存的时间更长,但也会使图像在 Cloudflare 的边缘缓存中保持更长时间,并减少 S3 存储桶的负载。
免责声明:
尽管 cloudflare 确实提供了看似免费的带宽,但它们的慷慨是有限度的。请参阅Cloudflare 条款的第 2.8 节。似乎上述网站可能违反了这些条款,如果 Cloudflare 认为您的使用量过多,则您的网站可能会被删除。届时,您将不得不进入仅 DNS 模式并返回为 S3 付费或与 cloudflare 协商一些条款和付款,以继续使用 Cloudflare 的带宽。