我正在尝试(并且大部分成功)在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:http://example.com.s3-website.ca-central-1.amazonaws.com/login转到我的s3存储桶网址 这已成功重定向到app.example.com/login。
不确定我缺少什么但是在S3静态网站属性中重定向规则不能通过HTTPS工作,因为主机名不同于实际s3存储桶的主机名?这就是我所能想到的,因为如果我从s3 url访问端点而没有使用SSL证书通过我的域名,它可以正常工作。
答案 0 :(得分:0)
对我原来的问题不是一个确切的答案,但是通过设置Cloudfront分发(如在原始问题中)做一些不同的方法来做我想要做的事情但是添加第二个来源 - app.example.com服务器 - 然后在分发和URL中设置行为列表,将某些URL路径路由到S3源或App Server源。
/css/* - s3
/js/* - s3
/login* - app server
/dashboard* - app server
等。我有*路径设置指向应用服务器,因为我的目标网页是静态的,只有5条路线。