Я запускаю небольшое веб-приложение, написанное на Python, работающее в uWSGI и обслуживаемое через nginx. Есть компонент, который генерирует ZIP-файлы для загрузки, которые иногда могут быть довольно большими (несколько ГБ). Часто случается, что соединение между 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 [...] !!!
Я уже установил socket-timeout
, socket-send-timeout
и socket-write-timeout
в 180
конфигурации uWSGI, но безрезультатно. Конфигурация nginx включает uwsgi_read_timeout 180s;
иuwsgi_buffering off;
Эффект в основном воспроизводим, то есть он происходит большую часть времени, особенно при больших ответах, но никогда с тем же смещением. Повторение запроса снова и снова может в конечном итоге привести к его завершению.
решение1
Оказалось, что проблема была не в моем приложении и не в nginx, а в неисправном пакетном фильтре перед ними обоими.