我的公司在 AWS 上运行着一项业务 Web 服务,该服务使用通配符 SSL 证书(适用于 *.example.com)。多个合作伙伴拥有子域名,需要 SSL(https://partner1.example.com,https://partner2.example.com等),并且我们为它们提供 HTML 或 JSON 响应。
我们的生产站点有一个面向 Web 的 ELB,其中安装了我们的 SSL 证书。ELB 平衡并终止 SSL到我们 VPC 中的生产服务器实例集群。我们的 Web 应用知道如何根据子域名提供正确的合作伙伴 HTML/JSON。
我想尽可能简单地将此复制到我们的测试环境(例如 QA、Staging、Demo)。但测试和生产环境不能是相同的服务器实例;我需要知道如果我弄乱了我们的测试环境,我不会停止生产。
理想情况下,处理生产流量的同一 ELB 可以以某种方式将流量路由到我的测试服务器,也许它们使用已知的 IP 地址或 DNS 子域?我说的对吗,这是不可能的?
我想我可以用 SSL 证书设置一个 ELB每个测试环境,每个“平衡”到一台服务器,但这似乎过于复杂,而且我猜也很昂贵。
所有实例(生产和测试)都在我们的 VPC 内运行。但目前只有生产集群在 ELB 上设置了 SSL(终止 SSL),并将直接 HTTP 请求传递给实例本身。
测试服务器接受 HTTP。我设置了公共弹性 IP 和 DNS 名称(staging.example.com、qa.example.com、demo.example.com)...但它们不受 SSL 保护。
测试服务器实例上几乎没有关键数据或客户数据,并且它们得到了妥善保护和修补,就像任何面向 Web 的服务器一样(我希望如此!!)。不过,我希望 SSL 不仅能提供额外的安全性,还能让我的测试环境尽可能接近我的生产环境。
除了我们的临时服务器的情况外,其他环境都由单个实例支持(例如,demo 和 qa 都在同一台服务器上),并使用 Apache 命名虚拟主机配置。因此,对于测试来说,有很多站点,但只有几台服务器。
有没有办法让我的通配符 SSL 证书只安装在我的负载均衡器上(或者可能还有更多),或者其他一些配置允许我根据 IP 或域名(甚至是 HTTP 标头)检测 HTTP 请求并将其路由到正确的测试服务器?
我知道这是一个复杂的问题。我非常了解 AWS、安全和网络,但我仍在尝试弄清楚 VPC 环境中的路由甚至内部 DNS,因此可能不知道我的选择。
答案1
说实话?我想说你想多了。只需使用多个 ELB 并将 *.example.com 证书放在所有 ELB 上。这实际上并不昂贵。在整个堆栈中,ELB 可能是最便宜的组件之一。这也允许您从同一个CloudFormation 模板或配置系统。您可以在任意数量的 ELB 上使用该证书。
我们遇到了一个和你非常相似的问题,并决定按照我上面描述的方式去做。我们最终节省了资金,因为 ELB 并不是我们每月成本的重要预测因素,而且即使有解决方案,也需要花费更多的时间。使用 ELB,你只需按流量付费,因此 QA 和演示环境的成本远不及生产负载的成本。在该链接中描述的示例中,一个月 100GB 的流量成本为 18 美元。这相当于三杯星巴克咖啡。
还有一个好处:调试起来也容易得多。无需担心奇怪的交易规则或类似的东西。