我已经设置了一个多租户应用程序,应该可以通过子域(例如https://client1.example.at)向客户提供。对* .example.at的请求通过Route 53路由到负载均衡器。负载均衡器具有AWS签名通配符证书(例如,支持example.at和* .example.at)。从这一方面来说,一切都按预期工作,我可以访问https://client1.example.at,https://client2.example.at等。
基于此设置,我想将没有子域(除了www)的特定请求(例如https://www.example.at或https://example.at)路由到存储桶(也称为www.example.com),而不是负载均衡器(我只想为静态站点提供服务,以便向"主域")发送请求。它可以工作,但我只能在不使用HTTPS的情况下访问www.example.at和example.at。我的设置如下:
然后我发现我必须使用Cloudfront才能将HTTPS用于带有S3存储桶的自定义域(如果这是正确的?)。现在我有几个问题:
答案 0 :(得分:1)
我想将没有子域名(除了www)的特定请求(例如https://www.example.com或https://example.com)路由到存储分区(也称为www.example.com)
除非您在S3前面使用代理(重新路由从浏览器传递的主机名),否则每个“域”必须路由到不同的存储桶,域名必须与存储桶名称匹配。如果他们没有,那么您的请求将转到与您路由的DNS名称相匹配的存储桶,该路由与S3存储桶端点的主机名无关。
换句话说,假设您的主机名是www.example.com,并且您将CNAME设置为example.com.s3.amazonaws.com(或者您可以使用网站端点,这对于此示例无关紧要)。
当请求到达DNS名称www.example.com时,它将被发送到S3主机名后面的S3服务器。来自浏览器的请求主机名为“www.example.com”,引用的实际CNAME指向S3端点是无关紧要的,因为S3从不知道浏览器连接的实际CNAME用途到S3。因此S3将尝试从www.example.com存储桶中提取请求的对象。
网址 - > S3 Bucket
它可以工作,但我只能在不使用HTTPS的情况下访问www.example.at和example.at。
使用SSL到S3存储桶时,这样的CNAME DNS路由不起作用。原因是S3通配符证书深度为1级(* .s3.amazonaws.com),因此您的存储桶www.example.com.s3.amazonaws.com将无法匹配它,因为它有2个以上的额外级别外卡。因此,您的浏览器拒绝该证书作为主机名无效。
要实现此目的,您必须在S3前面使用某种代理,并使用您自己的相关域证书。
是否有必要使用Cloudfront通过HTTPS为我的S3存储桶提供www.example.at和example.at的内容?
CloudFront是一个很好的选择,可以通过CNAME将DNS路由到我们刚才提到的S3存储桶问题来解决HTTPS问题。
如果需要Cloudfront,那么我必须根据官方AWS文档为www.example.at和example.at申请新证书。是否可以使用AWS证书管理器为同一域创建两个证书,或者我是否可以与此设置发生冲突?
我无法回答那个,我只能建议你试着找出会发生什么。如果它不起作用那么它不是一个选项。不应该花很多时间来解决这个问题。
是否可以将* .example.at用作具有负载均衡器别名的类型记录?
为了澄清,A记录只能是IP地址,A Alias类似于CNAME(但是特定于Route53)。
我强烈推荐CNAMES(或ALIASES,它们相似)。直接指向S3的A-Records之一是一个坏主意,因为您不知道该IP是否或何时将从服务中删除。通过使用CNAME / ALIAS引用主机名,您不必担心这一点。除非你能100%确定IP仍然可用,否则你不应该参考它。
一般来说,我的Route 53设置是否有效?
我没有看到任何问题,根据你描述的内容,听起来像是按预期工作。
答案 1 :(得分:0)
如果需要Cloudfront,那么我必须根据官方AWS文档为www.example.at和example.at申请新证书。是否可以使用AWS证书管理器为同一域创建两个证书,或者我是否可以与此设置发生冲突?
正如@JoshuaBriefman所建议的那样,我现在只是尝试在另一个地区为同一个域创建另一个证书并且它有效。我还可以使用证书进行CloudFront分发(在美国东部创建了额外的证书),现在所有工作都没有任何问题。