Re: несколько уровней upstream
Maxim Dounin
mdounin на mdounin.ru
Вт Авг 11 12:50:38 UTC 2015
Hello!
On Tue, Aug 11, 2015 at 11:38:07AM +0300, denis wrote:
> 10.08.2015 12:52, denis пишет:
> >Добрый день
> >
> >как сделать такое:
> >первый запрос - всегда на основной апстрим, при таймауте на него же через
> >другой порт, и там неудача - на резерв. Последнее через backup, а как
> >первые два сделать? Второму серверу weight=0?
> можно ли сделать try_files @first @second @third =404?
Можно, но оно будет делать не то, о чём вы подумали. Все
аргументы try_files, кроме последнего - это файлы, существование
которых будет проверяться на диске.
Если нужно, чтобы в случае ошибок от бекенда обработка уходила в
другой location, то следует пользоваться директивой error_page,
см. http://nginx.org/r/error_page/ru. Там, в частности, есть
пример такого вида:
location / {
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://backend;
}
Таким образом можно обеспечить произвольную многоуровневую
обработку запроса. Чуть более сложный пример есть в описании
модуля memcached,
http://nginx.org/ru/docs/http/ngx_http_memcached_module.html:
location / {
set $memcached_key "$uri?$args";
memcached_pass host:11211;
error_page 404 502 504 = @fallback;
}
location @fallback {
proxy_pass http://backend;
}
В случае, если требуется более одного перенаправления, необходимо
также разрешить множественные перенаправления с помощью директивы
recursive_error_pages, см. http://nginx.org/r/recursive_error_pages/ru.
Ну и не надо забывать, что явно описанная группа серверов сама по
себе обеспечивает опрос нужного количества серверов в случае
ошибок, см. http://nginx.org/r/proxy_next_upstream/ru.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru