亚马逊S3的静态托管 - DNS配置

122

我正在制作一个小型的Web应用程序(所有客户端都在本地),我想将其托管在Amazon S3上。我已经找到了几个指南,并成功创建了一个与我的域名相同的存储桶,将其设置为网站并上传了一些内容。

我遇到麻烦的地方是,所有文档开始变得有点模糊的地方,就是如何正确配置我的DNS。

我的注册机构(123-reg)只能建议我使用Web转发,它会给我一个mydomain.com.s3.amazonaws.com的网址。

我需要怎么配置,以及在哪里(即123-reg/Amazon)可以获得一个干净的URL?


自从有人提出这个问题以来,情况已经发生了变化。现在可以使用S#在根域上托管您的网站,详细步骤请参考:http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html - pors
4个回答

256

听起来你已经完成了大部分工作。为了清晰起见,我将再次重述这些步骤,以确保您正确设置:

  1. 使用你的域名作为存储桶名称创建一个s3存储桶(如果你想让你的网站成为example.comwww.example.com,则你的存储桶名称应为www.example.com

  2. 将你的内容上传到s3存储桶中。选择一个一致的名称用于你的网站索引文件(通常为index.html)。你还可以上传一个自定义页面用于404 Not Found错误。将其命名为404.html。授予每个网站文件读取权限,以便公众可以查看它。不要给存储桶赋予任何额外的权限,只需在其中授予文件即可。

  3. 将你的存储桶配置为网站。使用AWS控制台(https://console.aws.amazon.com/s3/),你可以选择你的存储桶,单击属性,然后选择“网站”选项卡。单击启用,并将你的索引文档设置为index.html,将错误文档设置为404.html。你还需要设置存储桶的访问权限,以允许通过Web进行访问(http://docs.amazonwebservices.com/AmazonS3/latest/dev/WebsiteAccessPermissionsReqd.html)。

  4. 记下网站配置选项卡中的“Endpoint” URL。这是你的网站所在的位置。你可以在新窗口中打开链接,然后你应该能够看到你的网站。点击浏览并确保一切都按预期工作。

在以下所有步骤中,您必须使用端点地址。普通的www.example.com.s3.amazonaws.com无法工作 - 您需要使用区域版本(http://www.example.com.s3-website-us-east-1.amazonaws.com/)

现在,我们可以设置DNS以为您提供干净的自定义URL。

首先,我们将映射www.example.com到您的站点。

使用您的DNS提供商工具(在您的情况下为123-reg),您需要创建一个CNAME记录,将www.example.com映射到www.example.com.s3-website-us-east-1.amazonaws.com

如果您只想要www.example.com,则只需要CNAME。大多数人还希望example.com也能正常工作,因此我们需要另一步操作。

example.com通常被称为裸域或域的顶级记录。它不能是CNAME的原因是CNAME仅适用于子域,如“www。”这使得将其指向s3更加困难。

通常的方法是使用服务自动重定向任何请求到example.com指向www.example.com。然后,这将捕获您的CNAME记录,并从s3提供您的站点。

无法使用纯DNS进行自动重定向,因此您需要使用其他服务。一些DNS提供商在其DNS中提供此服务(GoDaddy提供此服务,Amazon Route53不提供此服务,不确定123-reg是否提供)。

如果您的DNS提供商不支持此功能,则有几个免费的服务可用。我使用过其中之一http://wwwizer.com/naked-domain-redirect - 它不需要任何注册或付款。

要使用此类型的服务,您需要为裸域创建一个DNS“ A”记录。对于wwwizer.com服务,您需要创建一个A记录将example.com指向174.129.25.170。就这样!

因此,使用这种设置,如果用户在浏览器中输入example.com,则会发生以下情况:

  1. DNS查询:example.com -> 174.129.25.170(wwwizer.com的服务)
  2. 174.129.25.170发送HTTP请求以获取example.com
  3. 174.129.25.170重定向example.com -> www.example.com
  4. DNS查询:www.example.com -> CNAME至www.example.com.s3-website-us-east-1.amazonaws.com
  5. DNS查询:www.example.com.s3-website-us-east-1.amazonaws.com -> 指向Amazon S3
  6. 现在,www.example.com的HTTP请求由Amazon S3提供

祝您愉快!


2
非常感谢您提供的清晰明了的信息!我已经进行了更改,现在只需等待它生效。希望一切顺利运行。 - Merlin Mason
嗯,似乎还是不起作用。这是DNS配置的截图- http://cl.ly/CP6U。末尾的点看起来有点可疑,我没有添加它,在浏览器中使用带点的URL会给我一个Bucket未找到的错误。我尝试删除它,但一旦保存它就会回来,我尝试用“ /”替换它,但是我得到了一个无效的错误。你认为这可能是123-reg的问题吗? - Merlin Mason
嗨Merlin,我尝试在你的域名(wpfill.me)上进行查找,但我没有看到你截图中的任何记录。123-reg是否有单独的“发布”或“提交”步骤?似乎你的配置还没有生效。 - secretmike
PS,看看这个网站,如果你做任何WordPress主题可能会有帮助!- http://www.wpfill.me/ - Merlin Mason
2
Amazon S3现在支持与Route 53的重定向。请参考:http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html。 - pri
显示剩余3条评论

2

2019年更新

截至今日,以下DNS设置可使我成功运行AWS S3静态网站:

桶映射的DNS设置


1
我相信您必须选择存储桶中的所有文档,右键单击,然后选择“公开”。每次存储桶中有更改时,您都必须这样做。然后,我通常右键单击存储桶,选择属性,在右侧窗格中选择权限,然后添加“Everyone”作为“grantee”,然后仅授予他们“list”权限。您的文章的其余部分非常好。裸域名的部分帮助我解决了我的问题。您还可以在S3中将裸域名重定向到www域名下的“静态网站托管”中。这可能是最简单的方法。 再次感谢您的帮助。
蒂姆

4
如果您按照上述所述的方式应用存储桶策略,这个手动步骤就是不必要的。 - tooluser

0

从您的123-reg控制面板上的高级DNS屏幕开始

  • 我首先点击“重置DNS”按钮,将其恢复为默认的123-reg设置。

这给了我以下内容;

DNS条目类型       优先级TTL目标/目标
*                 A                                 81.xx.xx.xx              
@               A                                 81.xx.xx.xx              
@               MX          10               xx0.123-reg.co.uk
@               MX          20               xx1.123-reg.co.uk

  • 然后我添加了这个条目

www          CNAME                    www.example.com.s3-website-us-east-1.amazonaws.com

从他们的管理DNS指南pdf中可以看到,"@记录"是指"您的域名在其最纯净的形式下没有子域名",即裸域名stackoverflow.com

但它没有提到"*记录"是什么,我认为它应该是用来捕获所有子域名的,并且可能会覆盖CNAME记录,但事实并非如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接