2013-05-08 6 views
8

Amazon Load Balancerの後ろにFlaskアプリケーションを使用しようとしていて、Flaskスレッドがタイムアウトしてしまいます。ロードバランサがConnection: keep-aliveヘッダーを送信していて、これがFlaskプロセスを返さない(または時間がかかる)ように見えています。正面にガンコーンを置くと、プロセスが殺され、新しいプロセスが始まります。また、uWSGIを使用してFlaskアプリを直接公開する(ラッパーなし)こともできました。 Flaskプロセスのすべての結果が応答しないだけです。アマゾンロードバランサでのフラスコのアプリケーションタイムアウト

Flaskドキュメントでは、このヘッダーを無視するものは何もありません。私は、問題を解決するためにFlaskを使って何ができるのか、迷っています。

マシンへのカールと直接接続は問題なく動作しますが、ロードバランサ経由のものだけが原因です。ロードバランサ自体は何も間違っているようには見えず、いくつかの他のスタックでうまく使用しています。

答えて

8

私が今使用している解決策は、フラスコアプリケーションの周りのラッパーとしてガンコンを使用していることです。 worker_classについては、私はeventletをいくつかのワーカーと使用しています。この組み合わせは安定しており、応答性があるようです。 GunicornはHTTPS用にも設定されています。

問題を引き起こすFlaskの不具合と思われますが、これは効果的な回避策です。

+0

しかし、なぜあなたは理解することができましたか? – dnozay

+0

私は確信することはできませんが、FlaskがHTTP 1.1要求をどのように処理しているかは、まれにしか考えられません。 –

+0

GitHubでこれに関する問題を提出しましたか? –

0

最も簡単な方法は、すべての接続を強制することですあなたがHTTP/1.0を使用して、応答にヘッダーConnection: Keep-Aliveを追加していないことを確認することです。

werkzeug.http.remove_hop_by_hop_headers()をご確認ください。

+0

これを正確にどのように変更しますか?私はこれらの設定に精通していません。ありがとう – Joe

0

HTTPロードバランサが必要ですか?レイヤ4バランサを使用すると、より高いプロトコルレベルを妨げないため、問題を解決することもできます。

1

session.permanent = Trueapp.permanent_session_lifetimeを覚えていましたか?

+0

セッションは使用されていません。 –

+0

どこを正確に変更しますか?私はこれらの設定に精通していません。ありがとう – Joe

関連する問題