【问题标题】:HTTPS on EC2 instance running python project运行 python 项目的 EC2 实例上的 HTTPS
【发布时间】:2020-10-31 20:15:15
【问题描述】:

我在运行 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 上。

【问题讨论】:

    标签: python django amazon-web-services amazon-ec2


    【解决方案1】:

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

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

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

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

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

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

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

    现在回答你的问题:

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

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

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

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

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

    【讨论】:

    • 确认一下,这意味着我不需要在 443 端口上运行目标组。对吗?
    • 感谢您提供详细信息。对不起。我的问题 e 中有一个错字。 Route 53 中的别名记录(即 A 记录)应该引用负载均衡器的 DNS 名称(例如 awseb-AWSEB-1DFADSA4KTZ-1214590005.us-east-2.elb.amazonaws.com)还是应该是我的环境(例如 myproject-dev.us-east-2.elasticbeanstalk.com)?
    • 它应该是你的 ALB。为了解释原因,系统的入口点是 ALB,因此您的用户必须与 ALB 进行通信。这意味着您的域名应该解析为您的 ALB。
    猜你喜欢
    • 2017-05-01
    • 2016-05-30
    • 1970-01-01
    • 2017-03-31
    • 2021-09-15
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多