nginx - 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。
解决方案
AWS 负载均衡器现在支持 SSL 重定向,因此您不必在容器上执行此操作。
此外,您的 443 侦听器可以添加多个证书。因此,只需将所有证书添加到负载均衡器上的 443 侦听器即可。
然后在你的 443 监听器规则中,只有一个规则:
- IF:否则未路由的请求
- 然后:
- HTTPS,端口 443
- 重定向到“原始主机、路径、查询”
- '301 - 永久移动' 作为状态
现在,您的所有 http 请求都将通过重定向回 HTTPS 发送回用户,而无需访问您的容器或 nginx。当它们以 HTTPS 形式返回时,AWS ALB 拥有所有证书。
如果您遇到负载均衡器的限制,您可能必须将它们“分块”为 2 或 3 个 ALB,但我发现这更容易管理,尤其是在证书更改时间到来时。
推荐阅读
- c++ - 为整数指定无符号字符存储
- javascript - 对象数组中的未定义值Vuejs
- c - 在 C 中生成随机 64/32/16/ 和 8 位整数
- algorithm - 嵌套 for 循环的时间复杂度
- java - 测试用例如何测试异常?
- swift - TabView、tabItem:在选择时运行代码或添加 onTapGesture
- python - 在 .txt 文档中写单词而不重复
- database - Teradata TD_NORMALIZE 无助于合并相邻时段
- python - 在 pandas.Series 中找到所有非数字元素
- arrays - 为什么 Rust 中的 for 循环可以遍历切片或迭代器,但不能遍历数组?