首页 > 解决方案 > aws ecs 上 docker 容器中的 ssl 重定向

问题描述

我有一个前端 Angular 应用程序在 aws ecs ec2 的 nginx docker 容器中运行。这是一个 saas 产品,其他第三方域名将指向这个前端 docker 容器。我已经为该目标组设置了默认规则,但我想知道如何为每个域设置 ssl。ALB 当前仅支持 100 个侦听器规则,即实际上每个侦听器将只有 50 个规则(考虑 80 和 443)

后端 API 已经填充了 30 条规则。

如果我有 150 个域需要指向这个前端,我该如何设置 ssl?如果我在 nginx 的 80 端口虚拟主机中设置 301 重定向,例如

return 301 https://$host$request_uri

该请求将再次传递到应用程序负载均衡器端口 443,它将采用默认 ssl,并可能导致 ssl 错误。我们有没有机会在不返回应用程序负载均衡器的端口 443 的情况下进行 nginx https 重定向?或任何其他方法?我认为多域 ssl 证书是这里的一个选项,以便将其作为负载均衡器上的默认 ssl。

标签: nginxamazon-ecsamazon-elb

解决方案


AWS 负载均衡器现在支持 SSL 重定向,因此您不必在容器上执行此操作。

此外,您的 443 侦听器可以添加多个证书。因此,只需将所有证书添加到负载均衡器上的 443 侦听器即可。

然后在你的 443 监听器规则中,只有一个规则:

  • IF:否则未路由的请求
  • 然后:
    • HTTPS,端口 443
    • 重定向到“原始主机、路径、查询”
    • '301 - 永久移动' 作为状态

现在,您的所有 http 请求都将通过重定向回 HTTPS 发送回用户,而无需访问您的容器或 nginx。当它们以 HTTPS 形式返回时,AWS ALB 拥有所有证书。

如果您遇到负载均衡器的限制,您可能必须将它们“分块”为 2 或 3 个 ALB,但我发现这更容易管理,尤其是在证书更改时间到来时。


推荐阅读