AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1025614
Accepted
Eric
Eric
Asked: 2020-07-18 02:50:05 +0800 CST2020-07-18 02:50:05 +0800 CST 2020-07-18 02:50:05 +0800 CST

将 CloudFlare 添加到 S3 存储桶

  • 772

我有一个包含数千个 JPG 和类似媒体资产的 Amazon S3 存储桶。(这是我的论坛的存储空间。)我没有在这个存储桶中托管静态站点(没有任何类型的 HTML),它完全开放供公众阅读(因此论坛软件可以链接到图像)。

但是,我在 S3 上为带宽付出了代价。有人说我应该把 CloudFlare 放在 S3 存储桶前面,这样可以节省很多美元。凉爽的!但我不明白这个过程。CloudFlare 似乎想接管我主站点的所有 DNS,这不是我想要的。

我只需要https://my-bucket.s3.us-east-1.amazonaws.com被 CloudFlare 缓存/CDN。显然我不能改变亚马逊的 DNS ;-)

我认为这并不困难,但我似乎无法找到一个相对简单的解释来说明设置它的正确方法。(换句话说:我缺乏“大图”/主要步骤。)

(这在 CloudFlare 网站上有所介绍,但我对他们的说明感到困惑,而且我的用例也与他们所说的不同。)

amazon-s3 cloudflare
  • 1 1 个回答
  • 7116 Views

1 个回答

  • Voted
  1. Best Answer
    drussey
    2020-07-20T10:50:17+08:002020-07-20T10:50:17+08:00

    以下是让 Cloudflare 为您的 S3 存储桶工作必须采取的步骤列表,稍后我将根据需要尝试详细说明,但这里有很多步骤:

    第 1 步:设置基于域的存储桶

    注意:此主机名必须稍后加入 Cloudflare(在第 3 步中),因此请根据此选择它。必须使用整个主机名来为存储桶提供服务,所以不要选择已经在使用的东西。我会用static.example.com这个。

    进入 S3 并使用此域的名称创建一个存储桶,您需要选择现有存储桶以及您的图像作为存储桶的复制设置。您将希望存储桶与步骤 2 的现有存储桶位于同一区域: 为 static.example.com 创建存储桶

    步骤 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 的带宽。

    • 11

相关问题

  • 如何将 Symantec Backup Exec 与 S3 Amazon 存储结合使用?

  • Amazon S3 是否对您的数据做出任何形式的保证?

  • Amazon S3 存储如何计费?[关闭]

  • 使用亚马逊 S3 时的注意事项

  • 用于备份等的 S3 接口 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve