Вопрос по proxy

Igor Sysoev is at rambler-co.ru
Mon Mar 14 15:18:05 MSK 2005


On Mon, 14 Mar 2005, Zherdev Anatoly wrote:

> Есть вот какой вопрос по proxy. Есть подозрение, что nginx если во время
> выполнения запроса произошла ошибка на backend'е перепосылает запрос.
> Тут человек пожаловался, что письма приходят несколько раз, стал
> разбираться, оказалось что скрипт вызывается N раз , где N равно кол-ву
> бакендов. Дальнейшее изучение вопроса показало, что дублирование
> происходит на операции которая выполняется явно больше чем
> max_execution_time в php . Я бы мог предположить, что это proxy где-то
> по пути такой умный, но почему кол-во запросов равно кол-ву бакендов и
> все они пришли на разные бакенды ?
>
> Я потестировал на скрипте который делает sleep() у меня тоже
> запросы сдублировались, но почему-то только два раза (возможно что это
> еще может от браузера зависеть), хотя бакендов больше, но все равно дублирование
> на лицо.
>
>
> SITE IP - - [14/Mar/2005:13:52:49 +0300 0] "GET /test/long.php HTTP/1.1"441 "-" "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.6) Gecko/20050304 Firefox/1.0.1" "PASS/-/-/* 200/-/- *" "-"
>
> SITE IP - - [14/Mar/2005:13:53:44 +0300 40] "GET /test/long.php HTTP/1.1"288 "-" "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.6) Gecko/20050304 Firefox/1.0.1" "PASS/-/-/* 200/-/- *" "-"
>
>
>    log_format main      '%{Host}i %addr - - [%time %request_time] "%request"'
>                         '%length "%{Referer}i" "%{User-Agent}i" '
>                         '"%proxy" "%gzip_ratio"';
>
> В апаче логи вот какие:
>
> BackEnd1: 20050314135400:IP - - [14/Mar/2005:13:53:44 +0300] "GET /test/long.php HTTP/1.0" 200 0 "-" "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.6) Gecko/20050304 Firefox/1.0.1"
>
> BackEnd2: 20050314135400:IP - - [14/Mar/2005:13:52:49 +0300] "GET /test/long.php HTTP/1.0" 200 147 "-" "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.6) Gecko/20050304 Firefox/1.0.1"
>
> При первом запросе "200 147" при втором втором "200 0"
>
> При повторном запросе, если не выждать какое-то время запрос не дублируется.
>
> Время выполнения скрипта 40 сек, время
>
> Это как-то можно вылечить ?

По умолчанию используется

proxy_next_upstream  error timeout invalid_header;

Нужно поставить

proxy_next_upstream  error invalid_header;

Или увеличить таймаут  "proxy_read_timeout  120"


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





More information about the nginx-ru mailing list