【问题标题】:Routing example.at to S3 bucket and *.example.at to load balancer with HTTPS使用 HTTPS 将 example.at 路由到 S3 存储桶,并将 *.example.at 路由到负载均衡器
【发布时间】:2017-05-09 21:19:12
【问题描述】:

我已经设置了一个多租户应用程序,它应该可以通过子域(例如https://client1.example.at)供客户使用。对 *.example.at 的请求通过 Route 53 路由到负载均衡器。负载均衡器具有 AWS 签名的通配符证书(例如,支持 example.at 和 *.example.at)。从这方面来看,一切都按预期工作,我可以访问https://client1.example.athttps://client2.example.at 等。

基于此设置,我想将不带子域(www 除外)的特定请求(例如 https://www.example.athttps://example.at)路由到存储桶(也称为 www.example.com)而不是负载均衡器(我只想为对“主域”的请求提供一个静态站点)。它可以工作,但我只能在不使用 HTTPS 的情况下访问 www.example.at 和 example.at。我的设置如下所示:

然后我发现我必须使用 Cloudfront 才能将 HTTPS 用于具有 S3 存储桶的自定义域(如果正确?)。现在我有几个问题:

  1. 是否有必要使用 Cloudfront 通过 HTTPS 从我的 S3 存储桶中为 www.example.at 和 example.at 提供内容?
  2. 如果需要 Cloudfront,那么我必须根据 official AWS docs 为美国东部地区的 www.example.at 和 example.at 申请新证书。是否可以使用 AWS 证书管理器为同一个域创建两个证书,或者我是否会与此设置发生冲突?
  3. 可以使用 *.example.at 作为负载均衡器别名的类型记录吗?
  4. 一般来说,我的 Route 53 设置是否有效?

【问题讨论】:

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


    【解决方案1】:

    我想将不带子域(www 除外)的特定请求(例如 https://www.example.comhttps://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”,实际引用的指向 S3 端点的 CNAME 无关紧要,因为 S3 永远不知道浏览器使用什么实际 CNAME 进行连接到 S3。因此 S3 将尝试从 www.example.com 存储桶中提取请求的对象。

    URL -> S3 存储桶

    它可以工作,但我只能访问 www.example.at 和 example.at 而不使用 HTTPS。

    使用 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 是解决 HTTPS 与 CNAME 路由 DNS 到我们刚刚提到的 S3 存储桶问题的绝佳选择。

    如果需要 Cloudfront,那么我必须根据官方 AWS 文档为美国东部地区的 www.example.at 和 example.at 申请新证书。是否可以使用 AWS 证书管理器为同一个域创建两个证书,或者我是否会与此设置发生冲突?

    我无法回答这个问题,我只能建议您尝试找出会发生什么。如果它不起作用,那么它不是一个选项。解决这个问题应该不会花费太多时间。

    可以使用 *.example.at 作为负载均衡器别名的类型记录吗?

    澄清一下,A 记录只能是 IP 地址,A 别名类似于 CNAME(但特定于 Route53)。

    我强烈推荐 CNAMES(或 ALIASES,它们很相似)。直接指向 S3 的 A 记录之一是个坏主意,因为您不知道该 IP 是否或何时会从服务中删除。通过使用 CNAME/ALIAS 引用主机名,您不必担心这一点。除非您可以 100% 确定 IP 将保持可用,否则您不应引用它。

    一般来说,我的 Route 53 设置是否有效?

    根据您的描述,我看不出有任何问题,听起来一切都在按预期工作。

    【讨论】:

    • 感谢您的全面回答!
    【解决方案2】:

    如果需要 Cloudfront,那么我必须根据官方 AWS 文档为美国东部地区的 www.example.at 和 example.at 申请新证书。是否可以使用 AWS 证书管理器为同一个域创建两个证书,或者我是否会与此设置发生冲突?

    正如@JoshuaBriefman 所建议的那样,我现在只是尝试为另一个地区的同一个域创建另一个证书并且它有效。我还可以将证书用于 CloudFront 分发(在美国东部创建了额外的证书),现在一切正常,到目前为止没有任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2017-06-25
      • 1970-01-01
      • 2018-09-06
      • 2021-08-10
      • 2023-01-13
      相关资源
      最近更新 更多