Welcome! Log In Create A New Profile

Advanced

Re: upstream fail_timeout

October 22, 2011 11:10AM
Максим, еще раз спасибо.

Комментарии ниже.

On 10/21/11 18:13, Maxim Dounin wrote:

>>>> У меня задача - если все бэкенды в дауне, выводит 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?
>
> Какой именно код отдать клиенту - будет решать собственно
> backup-сервер (127.0.0.1:8080).
>
> Если на фронтенде стоит error_page 502 и используется
> proxy_intercept_errors - то на backup-сервере можно просто сделать
> "return 502", как-то так:
>
> server {
> listen 127.0.0.1:8080;
> return 502;
> }
>
> Если на фронтенде не используется proxy_intercept_errors, то
> "return 502" + "error_page 502 /502.html" + location для
> /502.html, как-то так:
>
> server {
> listen 127.0.0.1:8080;
>
> location / {
> error_page 502 /502.html;
> return 502;
> }
>
> location = /502.html {
> root /path/to;
> }
> }

Есть одна проблема при max_fails > 1 - клиенту будет одана стандартная
error page, N раз (пока Nginx не выкинет дохлый бэкенд из пула). В
принципе это не критично при высокой нагрузке, т.к. пострадают всего
пару человек. Решение - описать custom error page 2 раза - на фронтенде
+ на backup сервере.

Получилось так-то так:

upstream backend {
server 10.11.9.2 max_fails=2 fail_timeout=300s;
server 10.11.9.3 max_fails=2 fail_timeout=300s;
server 127.0.0.1 backup;
ip_hash;
}

server {
listen 127.0.0.1;
server_name localhost;

access_log /var/log/nginx/localhost_access.log main;
error_log /var/log/nginx/localhost_error.log info;

location / {
error_page 502 504 /server_errors/500.html;
return 502;
}

location ^~ /server_errors/ {
root /home/www/localhost/htdocs;
expires max;
}
}

server {
listen 80 default;
server_name localhost;

access_log /var/log/nginx/default_access.log main;
error_log /var/log/nginx/default_error.log info;

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;
}

error_page 502 504 /server_errors/500.html;

location ^~ /server_errors/ {
root /home/www/localhost/htdocs;
expires max;
}
}

Так вроже бы все работает как и требовалось.


>
> Maxim Dounin
>

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

upstream fail_timeout

sergey.kobzar October 20, 2011 09:02AM

Re: upstream fail_timeout

sergey.kobzar October 21, 2011 07:48AM

Re: upstream fail_timeout

Maxim Dounin October 21, 2011 08:42AM

Re: upstream fail_timeout

sergey.kobzar October 21, 2011 08:54AM

Re: upstream fail_timeout

Maxim Dounin October 21, 2011 09:06AM

Re: upstream fail_timeout

sergey.kobzar October 21, 2011 10:58AM

Re: upstream fail_timeout

Maxim Dounin October 21, 2011 11:14AM

Re: upstream fail_timeout

sergey.kobzar October 22, 2011 11:10AM

Re: upstream fail_timeout

Maxim Dounin October 23, 2011 10:52AM

Re: upstream fail_timeout

sergey.kobzar October 23, 2011 10:56AM

Re: upstream fail_timeout

Maxim Dounin October 23, 2011 12:32PM

Re: upstream fail_timeout

sergey.kobzar October 25, 2011 10:12AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 230
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready