Nginx

uWSGI 中止響應,失去與 nginx 的連接

  • September 30, 2021

我正在執行一個用 Python 編寫的小型 Web 應用程序,在 uWSGI 中執行並通過 nginx 提供服務。有一個組件可以生成 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-timeoutsocket-write-timeoutto 180,但無濟於事。nginx conf 包括uwsgi_read_timeout 180s;uwsgi_buffering off;

該效果大部分是可重現的,因為它在大多數時間都會發生,尤其是在響應較大的情況下,但從不會出現在相同的偏移量上。一遍又一遍地重複請求最終可能會導致完成。

結果發現我的應用程序和 nginx 都不是問題,而是兩者前面的數據包過濾器都有問題。

引用自:https://serverfault.com/questions/1078166