运行 Python Flask 应用程序的 Elastic Beanstalk (AWS) 的 HTTPS。无法获取要解析的 URL

Posted

技术标签:

【中文标题】运行 Python Flask 应用程序的 Elastic Beanstalk (AWS) 的 HTTPS。无法获取要解析的 URL【英文标题】:HTTPS for Elastic Beanstalk (AWS) running Python Flask application. Unable to get URL to resolve 【发布时间】:2020-01-25 07:11:15 【问题描述】:

我使用 Flask 框架创建了一个小型 Python 站点。我已使用 Elastic Beanstalk 将其上传到 AWS,并尝试配置环境以确保启用 HTTPS。我以前用 ASP.NET 和 IIS 做过这个,但不是 Python / Apache。 (我对这个“堆栈”很陌生)。如果我访问底层的弹性 beanstalk URL,我可以很好地访问该站点(自己尝试)

http://flask-priceline.f8n9uir55a.ap-southeast-2.elasticbeanstalk.com

但是,当我尝试使用 HTTPS 或 HTTP 访问正确的 DNS 时,例如

http://plmonitoring.in-daws.api.net.au/ 或 https://plmonitoring.in-daws.api.net.au/

我明白了:

无法访问此站点 plmonitoring.in-daws.api.net.au 的服务器 IP 地址无法找到。 尝试运行 Windows 网络诊断。 DNS_PROBE_FINISHED_NXDOMAIN

这就是我所做的。我已经在 AWS 中创建了一个有效证书。我还在 Route 53 中设置了适当的记录集/CNAMES,以便我的别名指向我创建的负载均衡器。

我使用经典负载均衡器创建了我的 Elastic Beanstalk 环境。负载均衡器位于公共子网中,运行 Web 服务器的 EC2 实例位于私有子网中。 (此 VPC 已存在且配置正确)。我在负载均衡器上创建了以下监听器:

我通过以下 .ebextensions 配置文件完成了这项工作:

option_settings:
  aws:elb:listener:443:
    SSLCertificateId: arn:aws:acm:ap-southeast-2:xxxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxx
    ListenerProtocol: HTTPS
    InstancePort: 80

我还在我的安全组中设置了以下内容(我尝试将 HTTP 80 添加为负载均衡器的入站和 EC2 的出站/EC2 的入站,而无需更改)。这是入站负载均衡器安全组:

负载平衡器输出:

EC2 输入:

EC2 输出:

我还将这个示例添加到 .ebextensions 文件夹中,希望它能将 HTTP 重定向到 HTTPS,以防用户输入 HTTP 而不是 HTTPS - https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/security-configuration/https-redirect/python/https-redirect-python.config

【问题讨论】:

【参考方案1】:

最严重的人为错误。将记录设置为 IPV4,而不是 CNAME!。问题解决了。

【讨论】:

以上是关于运行 Python Flask 应用程序的 Elastic Beanstalk (AWS) 的 HTTPS。无法获取要解析的 URL的主要内容,如果未能解决你的问题,请参考以下文章

在Flask中运行python子进程

unbuntu系统装好了python3.3.3和flask 运行程序报错 no module named flask

Python运维之 Flask + 宝塔运行小应用

Python运维之 Flask + 宝塔运行小应用

运行 Python Flask 应用程序的 Elastic Beanstalk (AWS) 的 HTTPS。无法获取要解析的 URL

python之celery在flask中使用