静态 S3 网站端点未通过 HTTPS 重定向
Posted
技术标签:
【中文标题】静态 S3 网站端点未通过 HTTPS 重定向【英文标题】:Static S3 Website endpoint not redirected over HTTPS 【发布时间】:2018-10-22 10:17:30 【问题描述】:我正在尝试(并且大部分成功)在 S3 中建立一个静态网站,该网站通过网址 www.example.com 和 example.com 提供服务(这两个网站都可以使用通过 ACM 提供的证书在 https 上正常工作)。它的这两个域都指向一个云端分发设置,其中 S3 存储桶作为其在 Route 53 中的端点。
我还有多个 Elastic Beanstalk 实例,它们通过不同的子域提供服务。 app.example.com 指向除登录页面之外的一个服务页面,而 api.example.com 正在提供该 api。所有这些都运行良好,并且通过 Route 53 为子域设置。
唯一不起作用的是我有以下重定向设置:
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>login/</KeyPrefixEquals>
</Condition>
<Redirect>
<Protocol>https</Protocol>
<HostName>app.example.com</HostName>
<ReplaceKeyPrefixWith>login/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
所以我希望发生的是,当有人访问 (www.)example.com 时,它会转到 S3 中托管的登录页面,而当他们转到 (www.)example.com/login 时,它会转到 ( www.)app.example.com/login(指向 ELB)。这在我使用 HTTPS 访问 https://(www.)example.com/login 时不起作用,但如果我只是通过 http 访问我的 s3 存储桶 url:http://example.com.s3-website.ca-central-1.amazonaws.com/login 成功重定向到 app.example.com/login。
不确定我遗漏了什么,但由于主机名与实际 s3 存储桶的主机名不同,S3 静态网站属性中的重定向规则是否无法通过 HTTPS 工作?这就是我能想到的,因为如果我从 s3 url 访问端点而不使用 SSL 证书通过我的域名,它工作正常。
【问题讨论】:
“不起作用”......它以什么具体方式不起作用?任何实际到达存储桶的请求都会触发重定向规则。我没有看到你在哪里描述了当你尝试使用 https 访问它时会发生什么。 嘿@Michael-sqlbot 我最近从技术社区的某个人那里了解到,与我完全相同的事情是托管在 S3 上的静态网站不支持通过 HTTPS 的重定向规则,他们显然不要通过 SSL 触发(这显然来自亚马逊支持),所以除非它已经改变,否则这对他们来说是一种非常奇怪的方式。 规则不会通过 HTTPS 触发 实际上并非如此。没有 CloudFront 的帮助,托管 S3 端点的静态网站根本不支持 HTTPS。您应该看到连接超时。 @Michael-sqlbot 很公平,我最终看到的是一个 xml 格式的页面,在尝试访问 example.com/login 时显示访问被拒绝,它应该根据规则重定向到我的其他服务器时不是通过 SSL。不是连接超时。 XML 表示您指向存储桶的 REST 端点,支持 HTTPS 但不支持重定向规则。 (HTTP REST 端点也不做重定向)。请参阅Key Differences Between the Amazon Website and the REST API Endpoint 以获取对此的解释。 【参考方案1】:不是我最初问题的确切答案,但有一种不同的方法可以通过设置 Cloudfront 分发(如在原始问题中)来做我想做的事情,但添加第二个来源 - app.example.com服务器 - 然后在分发和 URL 中设置行为列表,将某些 url 路径路由到 S3 源或 App Server 源。
/css/* - s3
/js/* - s3
/login* - app server
/dashboard* - app server
等等。我有 * 路径设置指向应用服务器,因为我的登录页面是静态的并且只有 5 条路由。
【讨论】:
以上是关于静态 S3 网站端点未通过 HTTPS 重定向的主要内容,如果未能解决你的问题,请参考以下文章
使用 CloudFront 和目录重定向的 AWS S3 静态网站托管
使用 S3、CloudFront 和源路径的静态网站托管的子文件夹重定向问题
静态网站托管中子域的 AWS S3 存储桶重定向与 DNS CNAME
如何在 AWS S3 网站 CloudFront 中设置别名重定向?