upstream fail_timeout

Sergey Kobzar sergey.kobzar на itcraft.org
Пт Окт 21 14:57:06 UTC 2011


Максим.

On 10/21/11 16:05, Maxim Dounin wrote:
> Hello!
>
> On Fri, Oct 21, 2011 at 03:52:02PM +0300, Sergey Kobzar wrote:
>
>> On 10/21/11 15:41, Maxim Dounin wrote:
>>> Hello!
>>>
>>> On Fri, Oct 21, 2011 at 02:46:45PM +0300, Sergey Kobzar wrote:
>>>
>>>> On 10/20/11 15:59, Sergey Kobzar wrote:
>>>>> Конфиг:
>>>>>
>>>>> proxy_connect_timeout 5;
>>>>>
>>>>> upstream backend {
>>>>> server 10.0.0.1 max_fails=3 fail_timeout=300s;
>>>>> server 10.0.0.2 max_fails=3 fail_timeout=300s;
>>>>> ip_hash;
>>>>> }
>>>>>
>>>>> location / {
>>>>> proxy_pass http://backend;
>>>>> proxy_next_upstream error timeout http_502 http_504;
>>>>>
>>>>> proxy_set_header Host $host;
>>>>> proxy_set_header X-Real-IP $remote_addr;
>>>>> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>>>>> }
>>>>>
>>>>> Оба бэкенда в дауне (полностью лежат). В не зависимости от числа
>>>>> запросов и времени между запросами, каждый раз жду ответа по 10 секунд.
>>>>>
>>>>> Хотя... каждый четвертый ответ приходит сразу.
>>>>>
>>>>> Что не так? Почему оба сервера не признаются не работающими в течении
>>>>> 300 сек?
>>>>>
>>>>> nginx/1.0.6
>>>>
>>>> No ideas?
>>>
>>> Если nginx обнаруживает, что все бекенды в дауне, он сбрасывает
>>> счётчики ошибок, и очередной запрос снова пытается идти на
>>> бекенды.
>>
>> Максим, спасибо.
>>
>> Плохо.
>>
>> У меня задача - если все бэкенды в дауне, выводит custom error page.
>> А получается при proxy_connect_timeout 5 и 4х бэкендах, пользователь
>> будет ждать 2 секунд.
>>
>> Решения я так понимаю нет?
>
> Стандартное решение - сделать backup сервер, с которого и отдавать
> "custom error page".
>
> С ip_hash там могут быть нюансы (вообще говоря, ip_hash не
> поддерживает backup, и если написать ip_hash до определения
> backup-сервера - даже ругается).  Но теоретически должно
> заработать как-то так:
>
>      upstream backend {
>         server 192.2.0.1;
>         server 192.2.0.2;
>         server 127.0.0.1:8080 backup;
>         ip_hash;
>      }

До server 127.0.0.1:8080 backup не додумался.

Хм, а как тогда отдать клиенту 502 скажем вместе со странице от 
127.0.0.1:8080?

>
> Maxim Dounin
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru



Подробная информация о списке рассылки nginx-ru