В Пнд, 13/04/2009 в 11:56 +0400, Anton Yuzhaninov пишет:
>> Помогите разобраться.
>> Пользователи стали жаловаться на проблемы с доступу к одному их
>> форумов(ipb) живущему на апаче за nginx'ом.
>>
>> Из "странностей" в access логах нашел код возврата 499. И вот такое
>> сообщение в error логе "client closed prematurely connection, so
>> upstream connection is closed too while sending request to upstream",
>> на соответсвующую запись из access лога.
>>
> ...
>> У меня есть всего 2 гипотезы:
>> Проблема на уровне сетевого интерфейса. Хотя сеть нагружена примерно
>> на половину из возможного 50MB/s.
>> Проблема в самом nginx'е при определенном уровне нагрузки или
>> количестве соединений.
>>
>> Подскажите в какую сторону смотреть для прояснения ситуации.
>>
> Скорее всего проблема в самом форуме. Ибо ошибка 499 обозначает, что
> клиент не дождался ответа.
>
>
"while sending request to upstream" говорит о том, что nginx даже не успел передать запрос на
upstream. Одна из возможных причин таких сообщений - клиент кликнул в браузере на одну ссылку,
а потом сразу же на другую (при этом запрос на первую ссылку закрывается).
То что nginx "видит" закрытие клиентского соединения я понимаю, но вот
причину этого закрытия - не понимаю. Как один из вариантов -
"пользователь нажал отмена", берем на вооружение, но что если он ее не
нажимал?
Мне прислали screenshot, на котором вот такой запрос с 499-ым ответом в
логе, и браузер (chrom) говорит о "Ошибка 2 (Net::ERR_FAILED):
неизвестная ошибка" - из этого можно предположить, что браузер все же
ожидал что-то получить в ответ(проваливается гипотеза отмены загрузки),
но соединение было потеряно.
Возможно поможет запись в tcpdump всего трафика.
На современном железе это вполне возможно.
сделать скрипт запускающий в бесконечном цикле:
tcpdump -pn -w /path/to/http_`date +'%F_%H-%M-%S'`.dump -c 1000000 'port 80 or
icmp'
в access_log nginx писать $remote_port
Далее для строчек с 499 кодом, можно по времени, ip, номеру порта найти эту коннекцию в файле с
дампом трафика и посмотреть. Возможно это что то прояснит.