ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re[2]: error 408



On Thu, 30 Dec 2004, Yevgeniy Kruglov wrote:

> >> А  по  какой  причине  nginx  может  давать некоторое количество 408? 
> >> Причем это
> >> случается  только  с Opera или FF, с MSIE не замечено ни разу. Ошибки 
> >> появляются
> >> как на контенте, отдаваемом самим nginx, так и с backend.
> IS> 408 - это client timed out. Эта ошибка пишется в лог, если таймаут 
> произoшёл
> IS> при чтении запроса или его тела от клиента. Причём, если в логе есть
> IS> User-Agent, то таймаут уже после чтения этого заголовка.
>
> Все чуть-чуть сложнее. Клиент просит страницу, в ответ тишина. Если долго 
> ждать,
> сервер  пишет  в  лог  и в браузер клиенту 408. Останавливают запрос - 408 в 
> лог
> пишется  сразу.  Повторный  запрос  проходит  без проблем. Если бы посетители 
> не
> видели ошибки, никто бы не стал искать ее в логах (1 штука на 10-15К хитов).
>
> IS> Почему нет MSIE, не знаю. Возможно, он попадает в записи без User-Agent.
>
> Кроме  того,  при тестировании с MSIE не удалось воспроизвести ситуацию. 
> Опера -
> получается.  Что удалось выяснить - некоторые посетителей сайта, что видели 
> 408,
> ходят  в  и-нет  через  squid.  Повторить пока получилось только через https, 
> от
> tcpdump пользы не будет.

Нужно собрать nginx так: ./configure ... --with-debug. Большого оверхеда это
не добавит, у меня на всех продакнш серверах nginx собран так. После этого
можно писать error_log кучу отладочной информации двумя способами:

1) error_log   file   debug;

error_log можно задать на глобальном уровне, на уровне http, server и location.
Поэтому можно задать отладку только на определённом location, а для всего
остального вести лог, например, на уровне notice.

2) В разделе events {} записать ip-адреса, для которых нужно вести
отладочный лог:

events {
    ...
    debug_connection  192.168.10.1;
    debug_connection  192.168.10.5;
    ...
}

В этом случае отладка будет вестись только для указанных адресов во всех
возможных error_log'ах, независимо от того, какой уровень лога задан.


Кстати, еще об отладке. В nginx есть несколько мест, где в принципе
могут возникнуть ошибки. В этом случае в лог пишется alert. Например,
alert, содержащий фразу "zero buf size". Такие alert'ы говорят о том,
что в nginx есть ошибка и её неплохо бы исправить. Для таких случаев
в основном разделе предусмотрена директива

debug_points  [abort|stop];

По умолчанию debug_points выключены. abort вызывает в таких cтранных
местах корку по сигналу ABORT, а stop останавливает процесс сигналом STOP и
к нему можно подключиться отладчиком. В принципе, мне достаточно abort,
и этот вариант безопаснее, так как в случае abort основной процесс
запустит новый рабочий процесс, а в случае stop - нет, и может случиться
ситуация, когда все рабочие процессы будут остановлены и обрабатывать
запросы будет некому.

Для исследования корки нужно, чтобы nginx был собран с отладочной информацией.
Это не то же самое, что и --with-debug. Если собирать nginx руками, то
отладочная информация добавляется всегда, однако, если nginx установлен,
например, из портов FreeBSD, то там она удаляется при установке командой
install ... -s.


Игорь Сысоев
http://sysoev.ru




 




Copyright © Lexa Software, 1996-2009.