如何通过 CNAME 将 Netlify 子域指向 AWS S3 存储桶?

How to point a Netlify subdomain to an AWS S3 bucket via CNAME?

我有一个通过 Netlify 托管的静态站点 (mysite.com)。 Netlify 目前管理我的 DNS,所以我有这样的名称服务器:

我的 S3 上有一个名为 dl.mysite.com 的存储桶。我想要它,以便当有人单击 link(例如 http://dl.mysite.com/file.pdf)时,它会从 S3 存储桶中获取它。

在我的 Netlify 管理仪表板中,我能够创建一个自定义子域 (dl.mysite.com),它会指示我执行以下操作:

Point dl CNAME record to obfuscated-url-d6f26e.netlify.com Log in to the account you have with your DNS provider, and add a CNAME record for dl pointing to obfuscated-url-d6f26e.netlify.com.

过去,当我专门使用 AWS 来托管应用程序和管理 DNS 时,只需在 Route53 中为子域创建别名记录并将其指向我的存储桶即可轻松完成。

既然 Route53 不处理我的 DNS,我该如何完成此操作?是否仍然可以将该子域指向特定的 S3 存储桶?

为了在 S3 上使用静态托管(允许您的存储桶是域名),您只能在 Route 53 上使用别名。

但是,您可以使用 CloudFront 使用您选择的域名来提供文件。

我会说你的选择是:

  1. 切换回使用 Route 53
  2. 使用 S3 存储桶的 CloudFront in-front
  3. 只需使用 S3 存储桶 link

(考虑到有多少浏览器模糊了地址并且人们并不真正关心,我会选择选项 3 个人。)

免责声明:我为 Netlify 工作。

Netlify 旨在托管 Web 内容,而不是完全代理到 S3 存储桶。按照您的描述使用它可能有效,但违反了我们的 terms of service 明确规定我们打算托管具有 html 内容的网站供人们浏览,而不是计算机。如果这就是您真正想要做的所有事情——从 S3 存储桶中提供内容,那么我根本不会在此处使用 Netlify 的中间步骤。将我们置于您的访问者和 S3 之间并没有给您带来太多好处,这是另一个失败点。一种更合理的方法是@thomas 上面建议的方法。

但是,如果您想为您的域使用 Netlify 的 DNS 托管,因为我们为您托管其他站点,您绝对仍然可以使用我们的 DNS 来设置直接指向 S3 的主机名 - 没有条款那里的服务违规,因为我们不限制您使用我们的 DNS 服务。许多客户让我们为在 netlify 上有一个网站而在其他地方有十几个网站的域托管 DNS。要配置它,我将该记录设置为 S3 主机名的 CNAME,并在 AWS 端处理任何 SSL 证书。这会很有效,如果不能,我们的技术支持团队将很乐意帮助您。

在第三种情况下,如果您想在 S3 的该主机名处提供 一些 内容(例如 PDF),然后提供一些其他内容(例如您的网站 html link 到 PDF 的文件),这是合法的!我们很乐意代理您的 S3 内容。例如,您可以在 S3 上像这样在 /_redirects 文件中设置一个到 /files/* 的(反向)代理:

/files/* http://aws-bucket-hostname/:splat 200!

这表示 "load all files from Netlify EXCEPT /files/* which should instead come from S3 with a path matching the part after /files/ in the URL"。在这种情况下,我们将为您处理 SSL 证书,因为我们终止浏览器连接而不是 S3。

此处提供有关该功能的更多文档:

https://www.netlify.com/docs/redirects/