Клиент закрывает преждевременное соединение при отправке клиенту, в nginx

У меня ошибка в nginx error.log:

2010/12/05 17:11:49 [info] 7736#0: *1108 client closed prematurely connection while sending to client, 
client: 188.72.80.201, server:***.biz, request: "GET /forum/ HTTP/1.1", 
upstream:"http://***:3000/forum/", host: "***.biz"

У меня есть 500 ответов на сайте каждый раз. Как я могу это исправить?

Спасибо.

Ответ 1

Установка [proxy_ignore_client_abort on;][1] может вам помочь.

Ответ 2

Я решил эту проблему сам в течение долгих часов сегодня и нашел решение:
Обратите внимание, что это исправление влияет только на вас при использовании балансировщика нагрузки

Проверьте тайм-аут ожидания балансировки нагрузки. У меня был тайм-аут ELB, установленный на 60 секунд (по умолчанию), и по мере того, как запрос зависал, он закрыл соединение после заданного времени. Но поскольку ELB находится перед nginx, nginx регистрирует, что "клиент" (в данном случае ELB) закрывает соединение.

Итак, если вы используете ELB, перейдите по ссылке: EC2 → Балансировщики нагрузки → Выберите правильный вариант → прокрутите вниз в описании и измените время ожидания простоя, если вы используете другие балансировки нагрузки, проверьте их конфигурацию и таймауты.

Также имейте в виду, что вам все равно может потребоваться изменить тайм-ауты прокси-сервера и т.д.

Ответ 3

Я обнаружил, что если вы отключите буфер прокси, то

http {
   proxy_buffering off;
...
}

Вероятно, буферы слишком малы или меньше. После изменения размеров буфера он отлично работает

proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 2048 8k;

Ответ 4

У меня была такая же проблема, и я исследовал ее. В моем случае это происходит только с браузерами Webkit (Chrome). Они открывают соединения с оптимистически большим количеством соединений, чем требуется, если вы загружаете только один ресурс. В таком случае избыточное соединение закрывается нечеловечески или по крайней мере без отправки HTTP-глагола над ним. Это приводит к указанной ошибке в nginx.

Относительно ответа №1: Не предлагаемые решения помогают, что логично, поскольку это не имеет ничего общего с проксированием.

Относительно ответа №2: proxy_ignore_client_abort; Помогает ли не выполнить мой тест.

К сожалению, я не нашел другого решения, кроме использования

error_log off;

Ответ 5

У меня была такая же проблема, что nginx закрывает соединение из-за установки send_timeout. Я увеличился, и он исправлен.

http
{
send_timeout 20;
...
}

Ответ 6

fastcgi_ignore_client_abort on определенно решит проблему.

Ответ 7

Я начал видеть это сообщение при изменении error_log от warn до debug. Реверс решил проблему.