amazon-web-services - 如何在使用 AWS ALB(应用程序负载平衡)的 EC2 实例中运行的 Flask 应用程序上设置 HTTPS (SSL)
问题描述
所以我有一个烧瓶网络应用程序。我只需要将其设置为 HTTPS。所以我在这里很迷失:
Application Load Balancer -> Target Group -> EC2 Instance (:443) -> ??? -> Flask
所以最初我的http堆栈中有以下内容:
nginx -> gunicorn -> Flask
这适用于http。如何设置目标组以指向 http 中 nginx 的暴露端口是有意义的。您只需提供端口。简单的。
但是,当您将 HTTPS 添加到等式中时,我完全迷失了。您让 AWS 通过 ACM(Aws 证书管理器)为您提供证书本身。但是,特别是AWS Certificate Manager 不允许导出创建的证书。因此,您不能为 nginx 提供证书,但要在 nginx 上使用 https (443),您必须在服务器块本身上提供 ssl_certificate.crt ...
所以从阅读看来你不需要 nginx ......我需要 gunicorn 吗?我只运行烧瓶吗?如果是这样,它如何“暴露”端口:443?
我真的不知道如何将 Flask 连接到目标组。任何人都可以指出我正确的方向吗?我已经用尽了所有谷歌搜索选项。
解决方案
您的困惑在于认为负载均衡器和 Flask 应用程序之间需要 SSL。您可以在负载平衡器处终止 SSL。这将在任何客户端(如 Web 浏览器)和您的 AWS 基础设施之间提供 SSL,并且您的虚拟私有网络内部、负载均衡器和 EC2 实例之间只有非 SSL 流量。
在 AWS ACM 中创建 SSL 证书,并将其附加到 Application Load Balancer 上的侦听器。将负载均衡器中的两个侦听器(不带 SSL 的端口 80 侦听器和带 SSL 的端口 443 侦听器)转发到目标组。让目标组通过端口 80、8080 或 5000 或您运行 Flask 的任何端口连接到您的 EC2 实例。我认为 Flask 默认使用端口 5000?
如果您对端到端加密有某种要求,需要您在负载均衡器和 EC2 实例之间设置 SSL,例如一些法规要求,那么您需要重新使用 Nginx 并购买 SSL证书,或者设置一个免费的 Let's Encrypt 证书,你可以在 Nginx 中使用。
推荐阅读
- python - 如何将使用 GetDist 生成的三角形/等高线图插入 Matplotlib 子图中?
- javascript - 在多维 JSON 数组中选择多个数组
- node.js - 无尽循环:找不到“交叉生成”
- progress-4gl - &GLOBAL-DEFINE 和 &SCOPED-DEFINE in Progress 4gl 有什么区别?
- java - 如何获取特定错误而不是内部服务器错误?
- javascript - 如何使用量角器框架在Firefox浏览器中输入ENTER,TAB等击键?
- javascript - javascript没有将值传递给函数,但函数仍然有它
- python - 将 pandas 列中的字符串与另一个 pandas 列中的字符串进行比较
- python - 在视频中每秒画一个圆圈
- node.js - 是否可以在以 sudo 开头的 Nodjs 中运行没有 sudo 的 bash 脚本?