我正在運行一個用 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-timeout
和socket-write-timeout
to ,但沒有效果。 180
nginxconf 包括uwsgi_read_timeout 180s;
和uwsgi_buffering off;
該效果大多是可重複的,因為它在大多數情況下都會發生,尤其是在響應較大的情況下,但不會以相同的偏移量發生。一遍又一遍地重複請求最終可能會完成。
答案1
事實證明,我的應用程式和 nginx 都不是問題,而是兩者前面的資料包過濾器出現了故障。