运行 python 项目的 EC2 实例上的 HTTPS

Jas*_*ard 0 python django amazon-ec2 amazon-web-services

我在运行 python 项目的 EC2 实例上很难解析 HTTPS。请求只是超时(ERR_CONNECTION_TIMED_OUT)。但是,HTTP 运行正常。我采取的步骤如下。

  1. 我在 ACM 中为以下域创建了一个证书:*.mywebsite.com 和 mywebsite.com

在此处输入图片说明

  1. 我已按如下方式设置 Route 53:

在此处输入图片说明

A 记录的路由策略很简单。

  1. 我已经进入了我的 EC2 实例的负载均衡器的侦听器,并将端口从 80 (HTTP)更改为 443 (HTTPS) 并添加了我的证书。

注意:“转发到”是在端口 80 (HTTP) 上运行的目标组。我读到这是正确的。

在此处输入图片说明

  1. 然后我进入了我的安全组的入站规则,并添加了 HTTPS

在此处输入图片说明

在这一点上,我有以下问题:

a) 鉴于这是一个 python/Django 项目,是否可以通过 aws 网站为 EC2 启用 HTTPS,或者我是否需要添加配置文件并部署到我的实例?

b) 我需要创建一个在 HTTPS 上运行的目标组吗?

c) 我的负载平衡需要监听端口 80 和端口 443 还是仅端口 443?

d) 在我的安全组中,我是否需要端口 80 才能访问 0.0.0.0/0 和 ::0/?

e) A 记录应该是负载均衡器的 DNS 名称还是我的环境的 CNAME?

谢谢你的帮助!一旦我们在这里得到答案,我将编写一个指南并将其发布在 youtube 上。

May*_*Raj 6

让我首先向您简要介绍一下在这种情况下请求是如何流动的。

正如您猜对的那样,负载均衡器,具体来说是应用程序负载均衡器可以处理 SSL 流量。这也意味着从负载均衡器到源服务器,在这种情况下提到的目标组,只有 http 流量将流动,而不是 https。所以您不必担心在服务器上处理证书。然后,来自源服务器的响应再次封装在 SSL 隧道中,并由 ALB 发送回客户端。

这意味着您的最终用户至少应该能够连接到负载均衡器端口 443 以及端口 80(可以重定向到 443)。

这意味着您的负载均衡器安全组应该向全世界或您的用户开放端口 443(以及可选的 80)

在源服务器和 ALB 之间,流量在您的应用程序运行的端口中流动,这是服务器的安全组应该允许访问 ALB 的端口。

换句话说,服务器 (EC2) 安全组应允许在应用程序运行的任何端口上使用 ALB。

注意:这不一定是 80 或 443,它也可以是 8080,只要您的目标组知道它并在该端口上转发请求。

现在回答您的问题:

a) 鉴于这是一个 python/Django 项目,是否可以通过 aws 网站为 EC2 启用 HTTPS,或者我是否需要添加配置文件并部署到我的实例?
你不必这样做。正如我提到的,加密/解密可以卸载到 ALB。在这里阅读更多关于它的文档。

b) 我需要创建一个在 HTTPS 上运行的目标组吗?
这是建立在上一个问题的基础上的,不,您不必这样做。应用服务器/EC2 实例不应该关心这个。

c) 我的负载平衡需要监听端口 80 和端口 443 还是仅端口 443?
这取决于您的用例。基本的必要是只有 443。如果您想允许用户仍然登陆 http 站点,然后被重定向到更安全的 https 版本,您可以再次使用 ALB。更多关于它在这里

d) 在我的安全组中,我是否需要端口 80 才能访问 0.0.0.0/0 和 ::0/?
对于 ALB,是的,但不适用于 EC2 实例。请记住,Ec2 从不直接与用户通信,仅与 ALB 通信。因此,您可以更严格地控​​制 EC2 上的流量。

e) A 记录应该是负载均衡器的 DNS 名称还是我的环境的 CNAME?
使用别名记录。它们更易于管理,AWS 将负责映射。更多关于这里