我有一个 Amazon S3 存储桶,里面有数千张 JPG 和类似的媒体资产。(这是我的论坛的存储空间。)我没有在这个存储桶中托管静态网站(没有任何类型的 HTML),它完全开放给公众阅读(因此论坛软件只需链接到图像即可)。
但是我在 S3 上为带宽支付了高昂的费用。有人说我应该把 CloudFlare 放在 S3 存储桶前面,这样可以节省很多钱。太棒了!但我不明白这个过程。CloudFlare 似乎想接管我主站点的所有 DNS,这绝对不是我想要的。
我只需要https://my-bucket.s3.us-east-1.amazonaws.com
被 CloudFlare 缓存/CDN。显然我无法更改 Amazon 的 DNS ;-)
我不认为这很难,但我似乎找不到一个相对简单的解释来说明如何正确设置它。(换句话说:我缺乏“大局”/主要步骤。)
(这是在 CloudFlare 网站上介绍过一些但我对他们的说明感到困惑,而且我的用例也与他们所说的不同。)
答案1
以下是使 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 条目处于“橙色云”模式,即代理(和缓存)。从第 2 步再次发出测试请求,但查看图像是否有来自 Cloudflare 服务器的迹象。这将包括一个Server: cloudflare
标头以及一个cf-cache-status
标头,指示您是否正在从 Cloudflare 的缓存中检索并节省带宽。这可能需要一些时间,因为上一步需要 DNS 更改才能传播。
此时您应该能够在请求中使用 https,但如果不能,请转到 Cloudflare 的 SSL/TLS > Edge 证书选项卡并验证是否启用了通用 SSL,或者是否正确配置了其他类型的证书。 笔记:Cloudflare 的 SSL/TLS 选项卡中的 SSL 模式必须为“完整”或“灵活”。这会在用户的浏览器和 Cloudflare 之间加密图像,但不会在 Cloudflare 和 AWS 之间加密。此外,此证书涵盖的所有请求在“完整”或“灵活”模式下都会受到类似的中间人攻击。此处概述的方法不能用于通过 https 提供图像。为此,您需要创建一个Cloudfront 分布。
步骤 4:切换图片链接引用
这是针对原始问题的。所有图像链接引用都必须从旧的 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 的带宽。