104: Сброс соединения по пиру: nginx + радуга + загрузка более 1 мб
Я использую ThreadPool rainbows + nginx (сокет unix)
При загрузке больших файлов я получаю следующее в журнале ошибок nginx (ничего в журнале приложений):
readv() failed (104: Connection reset by peer) while reading upstream
Браузер получает ответ:
413 Request Entity Too Large
Почему это происходит?
- "client_max_body_size 80M;" устанавливается как на http, так и на уровне сервера (на всякий случай) в nginx
- nginx общается с радугами через сокет unix (восходящий сокет + location @ proxy_pass)
- Я не вижу ничего в других журналах. Я проверил:
- журнал радуги
- журнал бригадира
- журнал приложений
- dmesg и /var/log/messages
- Это происходит при загрузке файла размером ~> 1 МБ
3 ответа
Оказывается, у Rainbows была опция конфигурации под названием client_max_body_size
по умолчанию 1 МБ. Опция описана здесь
Если эта опция включена, Rainbows будет 413
на большие запросы молча. Вы можете не знать, что он ломается, если не запускаете что-то перед ним.
Rainbows! do
# let nginx handle max body size
client_max_body_size nil
end
ECONNRESET
Ошибка (сброс соединения по одноранговой сети) означает, что соединение было нечисто закрыто бэкэнд-приложением. Это обычно происходит, если внутреннее приложение умирает, например, из-за ошибки сегментации, или уничтожается убийцей OOM. Чтобы выяснить точную причину, вы должны проверить свои журналы бэкэнда (если есть) и / или системные журналы.
Может быть, у вас есть client_max_body_size
установить в свой nginx.conf
который ограничивает размер тела до 1 Мб, например
client_max_body_size 1M;
В этом случае вам необходимо удалить его, чтобы разрешить загрузку файлов размером более 1 млн.