Cloudfront 使用 ssl 将 www 重定向到裸域 [关闭]

Posted

技术标签:

【中文标题】Cloudfront 使用 ssl 将 www 重定向到裸域 [关闭]【英文标题】:Cloudfront redirect www to naked domain with ssl [closed] 【发布时间】:2015-04-24 21:14:30 【问题描述】:

如果之前有人问过这个问题,请原谅我,有很多资源涉及到这个问题,但似乎没有什么适合我的特定 (https) 用例。

我正在尝试将https://www.example.com 重定向到https://example.com。同样,这应该适用于 http://www.example.com 到 https://example.com。

我已经使用 s3 存储桶的来源设置了一个云端分发,将 http 重定向到 https,添加了 cname example.com 并添加了我的域证书(适用于 www 子域以及裸域)。

我还设置了一个单独的分发,其 cname 为 www.example.com,添加了证书并将源设置为一个单独的 s3 存储桶,在(静态网站托管)中将所有请求重定向到 https://example.com。

http://example.com 到 https://example.com 的重定向按预期工作,但是 http(s)://www.example.com 到 https://example.com 没有。

在路由 53 中,我将根域别名为第一个 cloudfront 分布,而 www 别名为第二个。

【问题讨论】:

请在此处查看我的回答,这应该很有帮助:***.com/questions/36265027/… 我们可以把它移到服务器故障而不是关闭这个问题吗?我想添加一个答案。 +1 @jtheletter 的提议。只是为了记录,我写了一个in-depth tutorial,关于如何使用 S3、CloudFront 和 Route53 建立一个静态网站。它描述了用于正确处理 www 子域的基本 AWS 基础设施。 【参考方案1】:

感谢这个答案,我找到了解决方案:Amazon S3 Redirect and Cloudfront

简而言之:

如果源只是存储桶 ID,Cloudfront 不遵守 S3 中设置的重定向规则。相反,我必须将源设置为提供的 s3 静态网站主机名。

【讨论】:

非常感谢您发布您的答案。我用它来获取从裸域到 www 的 HTTPS 重定向,例如https://example.com -> https://www.example.com。此解决方案违反直觉,因为 AWS UI 会自动完成标准 S3 主机名 (bucketname.s3.amazonaws.com),您认为这是正确的做法,但对于此用例,静态网站托管端点(例如bucketname.s3-website-us-east-1.amazonaws.com) 是您所需要的。 同样重要的是,您的 CloudFront 分配将任何内容设置为 默认根对象,因为它会破坏 S3 中的重定向桶。 您的链接指向一个问题。您打算链接该问题的哪个答案? @kellen,你如何将 apex 转发到 www?这就是我要为我的 HTTPS 域做的事情。我的规范 URL 包括 www. @Costa 看看这个答案中的说明。只需反转域,因为您想要顶点-> www。重要的是使用静态网站托管部分下的存储桶中提供的 URL 作为 CloudFront 目标,而不是自动完成 URL。 ***.com/a/42869783/94671【参考方案2】:

在 AWS 上托管网站以便:

https://www.example.com、http://www.example.com 和 http://example.com 都重定向到 https://example.com

你需要:

    创建两个名为:example.comwww.example.com 的 S3 存储桶。

    在这两个存储桶上打开 Static Website Hosting

    在存储桶 www.example.com 中配置重定向到:https://example.com。 在存储桶属性中选择 Static Website Hosting => 将所有请求重定向到另一个主机名。在Target bucket or domain字段,输入example.com,在Protocol字段,输入https

    为这些存储桶创建 两个 CloudFront 分配。这些分布中的每一个都指向相应的存储桶:

    对于原始域名,提供静态网站托管部分中提供的存储桶网址。网址应具有以下形式(或类似形式):example.com.s3-website-us-west-1.amazonaws.com

    在两个分发集上 HTTP 到 HTTPS 重定向。

    请勿使用亚马逊自动完成功能推荐的 URL!

    不要设置默认根对象属性!

    通过将 www.example.com 和 example.com 的 A 记录设置为指向相应的 CloudFront 分配来配置 DNS。

它为什么有效? CloudFront 在两种情况下都提供从 HTTP 到 HTTPS 的重定向(有和没有 www)。 www.example.com 的存储桶提供到 example.com 的重定向。如果您没有此分配,则存储桶将无法重定向对 https://www.example.com 的请求。 S3 本身不支持静态网站托管的 HTTPS。

【讨论】:

不要在 www->naked CF 分发上设置 HTTP 到 HTTPS 重定向以避免不必要的重定向。您希望 example.com 直接转到 example.com 而不是 example.com 首先。 不要在 53 上为 www 设置 A 记录。使用 CNAME。对根域上的 A 和 AAAA 记录使用 ALIAS。 另外值得注意的是,简单地使用 www.example.com 上的 CNAME 指向 example.com 不会重定向。相反,www.example.com 将显示与 example.com 不同的内容。 所以我的解决方案是将 www.mydomain.com 存储桶重定向到 domain.com 并将协议设置为 https。在每个 Cloudfronts(即 www.mydomain.com 和 mydomain.com 的一个)中,我将 CNAME 分别设置为 www.mydomain.com 和 mydomain.com。完成此操作后,在 S3 中,我可以选择适当的 Cloudfront 作为 A 记录的别名。如上所述,我没有使用自动完成建议的 URL - 我使用了静态网站主机名 - 并且我没有设置默认的 root 属性。 为什么没有人解释您需要为每次重定向安装 SSL 证书以防止来自浏览器的“不安全”警告?它是基本的,但像我这样“只是开发人员”的人并不知道这一点。我花了几天时间试图解决它,直到我发现这个建议......

以上是关于Cloudfront 使用 ssl 将 www 重定向到裸域 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

WordPress + CloudFront 灵活 SSL 最终进入重定向循环 (https)

使用 S3/CloudFront 将 www 重定向到非 www,无需单独的存储桶

如何使用 Cloudfront 将裸域重定向到 www?

对于托管在 CloudFront 后面的 EC2 实例上的站点,如何将非 www 流量重定向到 www?

如何使用自定义 SSL 正确链接 Heroku、CloudFront、Route53?

cloudfront 重定向到源而不是别名