7

我正在尝试在 Amazon 负载均衡器后面使用 Flask 应用程序,并且 Flask 线程一直超时。负载均衡器似乎正在发送Connection: keep-alive标头,这导致 Flask 进程永远不会返回(或需要很长时间)。随着 gunicorn 在前面,进程被杀死并开始新的进程。我们还尝试使用 uWSGI 并简单地直接公开 Flask 应用程序(无包装器)。所有结果都导致 Flask 进程没有响应。

我在 Flask 文档中看不到任何可以忽略此标头的内容。我不知道我还能用 Flask 做什么来解决这个问题。

与机器的卷曲和直接连接工作正常,只有通过负载平衡器的连接才会导致问题。负载均衡器本身似乎没有做错任何事情,我们成功地将它与其他几个堆栈一起使用。

4

4 回答 4

8

我现在的解决方案是使用 gunicorn 作为烧瓶应用程序的包装器。对于worker_classeventlet与几个工人一起使用的。这种组合似乎稳定且反应灵敏。Gunicorn 还配置了 HTTPS。

我认为这是导致问题的 Flask 中的缺陷,这是一种有效的解决方法。

于 2013-07-15T06:48:08.010 回答
1

你记得设置session.permanent = Trueapp.permanent_session_lifetime吗?

于 2013-07-16T04:22:03.990 回答
0

最简单的方法是强制所有连接是确保您正在使用HTTP/1.0而不是将标头添加Connection: Keep-Alive到响应中。

请结帐werkzeug.http.remove_hop_by_hop_headers()

于 2013-07-13T08:16:58.473 回答
0

您需要 HTTP 负载平衡器吗?使用第 4 层平衡器也可以解决您的问题,因为它不会干扰更高的协议级别。

于 2013-07-15T14:39:11.933 回答