uWSGI が応答を中止し、nginx への接続が失われる

uWSGI が応答を中止し、nginx への接続が失われる

私は Python で記述され、uWSGI で実行され、nginx 経由で提供される小さな Web アプリケーションを実行しています。ダウンロード用に ZIP ファイルを生成するコンポーネントがあり、このファイルは時々非常に大きくなることがあります (数 GB)。nginx と uWSGI 間の接続が切断され、リクエストが中止されることがよくあります。nginx は、接続を開いたままにしてさらにレスポンス データを期待するため、ブラウザがタイムアウトになる間、切り捨てられたレスポンスを無視します。アプリケーションは適切な Content-Length ヘッダーを生成します。

uWSGI ログから:

uwsgi_response_write_body_do(): Broken pipe [core/writer.c line 429] during GET [...]
OSError: write error
SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request [...] !!!

uWSGI設定でsocket-timeout、およびをすでに設定しましたsocket-send-timeoutが、効果はありませんでした。nginx confには、およびが含まれています。socket-write-timeout180uwsgi_read_timeout 180s;uwsgi_buffering off;

この効果は、ほとんどの場合、特に大きな応答の場合に発生するという点で、ほぼ再現可能ですが、同じオフセットで発生することはありません。リクエストを何度も繰り返すと、最終的に完了につながる可能性があります。

答え1

結局、私のアプリケーションも nginx も問題ではなく、両方の前にあるパケット フィルターに欠陥があったことが判明しました。

関連情報