Я запускаю небольшое веб-приложение, написанное на Python, работающее в uWSGI и обслуживаемое через nginx. Есть компонент, который создает ZIP-файлы для загрузки, которые иногда могут быть довольно большими (несколько ГБ). Часто бывает так, что связь между nginx и uWSGI обрывается и запрос прерывается; nginx игнорирует усеченный ответ, пока браузер работает по тайм-ауту, потому что он держит соединение открытым, ожидая дополнительных данных ответа. Приложение генерирует правильный заголовок Content-Length.
Из журнала uWSGI:
uwsgi_response_write_body_do(): Сломан канал [core/writer.c строка 429] во время GET [...]
OSError: ошибка записи
SIGPIPE: запись в закрытый pipe/socket/fd (возможно клиент отключился) по запросу [...] !!!
я уже поставил время ожидания сокета
, тайм-аут отправки сокета
и время ожидания записи сокета
к 180
в конфигурации uWSGI, безрезультатно. Конфигурация nginx включает uwsgi_read_timeout 180 с;
и uwsgi_buffering выключен;
Эффект в основном воспроизводим, поскольку он происходит большую часть времени, особенно при больших откликах, но никогда с одинаковым смещением. Повторение запроса снова и снова может в конечном итоге привести к завершению.