AWS ALB背后的Python Flask端到端加密

时间:2019-02-24 15:02:08

标签: python-3.x amazon-web-services ssl flask amazon-ecs

我有一个在ECS集群中运行的Python 3 Flask应用程序。 Flask应用程序配置为以SSL模式运行。无法通过ALB Cname访问该应用,因为它会生成拒绝连接,如此处所示-

curl -Il https://tek-app.example.com/health
curl: (7) Failed to connect to tek-app.example.com port 443: Connection refused

直接击打ALB并忽略SSL证书异常时,它的工作原理如此处所示-

curl -Il -k https://tek-w-appli-1234.eu-west-1.elb.amazonaws.com/health
HTTP/2 200 
date: Sun, 24 Feb 2019 14:49:27 GMT
content-type: text/html; charset=utf-8
content-length: 9
server: Werkzeug/0.14.1 Python/3.7.2

我知道主要的建议是在Nginx或Apache代理后面运行它,并通过它们的配置设置X-Forward标头,但是我认为这超出了解决方案的设计范围。

我也尝试过在应用程序中启用以下功能-

from werkzeug.contrib.fixers import ProxyFix
...
app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app)
...

此修补程序现在可以在Cloudwatch日志中生成正确的源IP,但不允许通过ALB Cname进行连接。

这里缺少一些简单的东西吗?

回复第一个答案

谢谢-Cname指向正确的ALB。两周前,我在一个Apache服务器上遇到了类似的问题,其解决方法是确保X-Forward-Proto在Apache vhosts.conf文件中使用。所以我想这可能是相似的。

1 个答案:

答案 0 :(得分:0)

我又做了一次-在本地开发时,我编辑了/ etc / hosts文件以具有本地条目。然后,当Flask应用程序推送到云中并从同一桌面进行测试时,它引用的是本地DNS条目,而不是公共等效条目,因此连接被拒绝。删除本地条目后,所有内容现在都可以使用。