Amazon S3上的静态托管-DNS配置


117

我正在开发一个小的Web应用程序(所有客户端),我想将其托管在Amazon S3上。我找到了一些有关此的指南,并设法为自己创建了一个存储桶(与我的域的名称相同),将其设置为网站并上传了一些内容。

在我苦苦挣扎的地方,以及所有文档开始变得有些模糊的地方,是如何正确配置DNS。

我的所有注册服务商(123-reg)可能都建议使用网络转发,这使我得到了mydomain.com.s3.amazonaws.com

我必须配置什么,在哪里(例如123-reg / Amazon)可以获得干净的URL?


自从提出这个问题以来,情况已经改变。现在可以在具有根域的S#上托管您的网站,请参见此处的演练
20:42

Answers:


248

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

  1. 使用您的域名作为存储桶名称来创建s3存储桶(如果您希望站点为example.com或www.example.com,则存储桶名称应为www.example.com)

  2. 将您的内容上传到s3存储桶。为您的网站索引文件选择一个一致的名称(通常为index.html)。您还可以上载针对404找不到错误的自定义页面。将此称为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. 在网站配置标签中记下“端点” 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请求
  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. Amazon S3现在为www.example.com提供HTTP请求

请享用!


2
非常感谢您所做的所有澄清工作!我已经进行了更改,只需等待它完成,手指交叉即可正常工作。
Merlin Mason

嗯,似乎还是没有用。这是DNS配置的屏幕截图-cl.ly/CP6U末尾 的点似乎很可疑,我没有在其中添加,将URL放在末尾有点的浏览器中给了我一个找不到桶的错误。我尝试将其删除,但保存后又回来了,并尝试用/替换它,但随后收到无效错误。您是否认为这可能是123-regs的问题?
Merlin Mason

嗨,梅林,我尝试过查询您的域名(wpfill.me),但您的屏幕快照中没有任何记录。123-reg是否有单独的“发布”或“提交”步骤?您的配置似乎没有生效。
secretmike 2011年

嗯,我认为123-reg一定有问题,我尝试重置DNS记录并等待48小时使其传播,但仍然没有任何乐趣。然后,我将DNS托管切换到Cloudflare,并在20分钟内启动并运行了整个过程:)感谢您的帮助,非常感谢!
Merlin Mason


1

我相信您必须选择存储桶中的所有文档,右键单击并选择“公开”。每当存储桶中发生任何更改时,您都必须执行此操作。然后,我通常会右键单击存储桶,选择属性,在右窗格中选择权限,然后添加“每个人都作为”被授予人”,然后仅给他们“列表”权限。本文的其余部分非常出色。有关裸域的部分有所帮助我可以解决我的问题,您也可以在“静态网站托管”下将裸域重定向到S3中的www域,这可能是最简单的方法。再次感谢您的所有帮助。

提姆


3
如果您如上所述应用存储桶策略,则无需执行此手动步骤。
使用者2014年

1

更新2019

截至今天为止,以下DNS设置对我来说可以使AWS S3静态网站正常工作:

桶映射的DNS设置


0

在123-reg控制面板上的“高级DNS”屏幕上

  • 我首先单击“重置DNS”按钮以使用默认的123-reg设置。

这给了我以下几点:

DNS EntryType       PriorityTTLDestination/Target
*                 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

在他们的Manage DNS guide pdf中,“ @记录”是指“您最纯的域,没有子域”,即裸域stackoverflow.com

但是它没有提到“ *记录”是什么,我以为它将捕获所有子域,并认为它可能会超过CNAME记录,但事实并非如此。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.