【问题标题】:How can I assign a subdomain to my AWS S3 Bucket?如何将子域分配给我的 AWS S3 存储桶?
【发布时间】:2017-05-30 07:57:00
【问题描述】:

我的 AWS 存储桶中有一个文件:https://s3.amazonaws.com/static.my-company.com/media/my-file.jpg

目前我正在我的index.html 文件www.my-company.com 中访问该文件。我有 my-company.com 作为 AWS Route 53 中的托管区域。

但是在那个index.html 中,我不希望这个资产在AWS 存储桶中很明显。我希望它看起来好像托管在我自己域的服务器上。因此,我希望将其寻址为 https://static.my-company.com/media/my-file.jpg,而不是 https://s3.amazonaws.com/static.my-company.com/media/my-file.jpg。我该怎么做?

我尝试在 Route 53 中插入​​一条 CNAME 记录,将 static.my-company.com 指向 s3.amazonaws.com/static.my-company.com。但这没有用。这就是 Jay Godse 推荐的 here

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-route53


    【解决方案1】:

    2019 年更新:S3 中的 AWS 子域托管

    以下步骤对我有用,以使子域在 AWS S3 托管的静态网站上运行:

    1. 创建带有子域名的存储桶。在下面的示例中,它将是 www.subtest.mysite.com

    注意:确保在存储桶的“权限”选项卡上设置了以下内容:

    1.阻止公共访问(存储桶设置) 2.访问控制列表 3.桶策略 适当设置以确保存储桶是公开的。 (假设您已经为您的根域存储桶执行此操作,这些设置可以镜像到此子域存储桶上)

    1. 上传存储桶中的index.html文件

    1. 使用您的域提供商创建 CNAME 记录

    【讨论】:

      【解决方案2】:

      因此,我希望将其寻址为 https://static.my-company.com/media/my-file.jpg,而不是 https://s3.amazonaws.com/static.my-company.com/media/my-file.jpg。我该怎么做?

      这里有三个不同的问题。

      如果您为存储桶启用网站托管功能,正如@Deif 在此处的另一个答案中说明的那样,您可以使用别名或 CNAME 将 Route 53 中的主机名指向存储桶的网站端点,并且它可以工作。但它不支持 HTTPS。

      HTTPS 要求 Web 服务器使用 SSL (TLS) 证书向浏览器标识自己,该证书包含与浏览器地址框中的主机名匹配的主机名。 REST 端点上的 S3 证书与 s3.amazonaws.com 的各种排列匹配——它们与您的域不匹配。

      所以你需要一个 SSL 证书。如果您已经拥有一个,请将其上传到 us-east-1 区域的 Amazon Certificate Manager (ACM)。¹如果没有,ACM 可以免费为您创建一个。

      接下来,创建一个新的 CloudFront 分配,使用您的子域作为备用域名,使用上面的 ACM 证书,并使用您的网站端点主机名作为源服务器。

      然后,将 Route 53 中的子域指向 CloudFront 分配。

      现在,https://subdomain.example.com/pics/funny/cat.jpg 转到 CloudFront,它提供 SSL 并从相应的存储桶中获取内容。

      为什么需要 CloudFront?这是使用 S3 启用 SSL 的自定义域名的官方解决方案。 S3 本身不支持该功能。使用 CloudFront 有附带成本,但它显着降低了 S3 本身的成本。当通过 CloudFront 进行下载时,S3 对用于下载的带宽收取 0 美元,而 CloudFront 则对带宽收费。在许多情况下,CloudFront 的带宽价格较低(大概是因为 CloudFront 可以水平扩展以缓解拥塞,而 S3 只能垂直扩展——它受设计位置限制)。


      ¹ 在 ACM 中,us-east-1 区域始终用于我在此处描述的设置,无论存储桶位置如何,因为 CloudFront 由 us-east-1 管理,我们需要 CloudFront 可以访问此证书。

      【讨论】:

        【解决方案3】:

        您需要将您的 S3 存储桶设置为 静态网站(在 S3 中设置您的存储桶是一个选项)。然后,域名将更改为 http://static.my-company.com.s3-website-us-east-1.amazonaws.com. 之类的名称,这是您希望在 Route 53 中将 CNAME 记录设置为的名称。

        请注意,您不能像当前那样将 CNAME 记录设置为目录,它必须是可解析的域。

        【讨论】:

        • 正确,但不支持 HTTPS 并且 us-east-1 将随创建存储桶的区域而异。已找到存储桶的正确端点 in the console
        猜你喜欢
        • 1970-01-01
        • 2020-12-05
        • 2016-03-02
        • 2014-10-10
        • 2021-09-09
        • 1970-01-01
        • 2017-09-21
        • 2014-08-22
        • 2013-09-16
        相关资源
        最近更新 更多