Re[2]: несколько уровней upstream
Михаил Монашёв
postmaster на softsearch.ru
Ср Авг 12 06:28:05 UTC 2015
Здравствуйте, Maxim.
>> >как сделать такое:
>> >первый запрос - всегда на основной апстрим, при таймауте на него же через
>> >другой порт, и там неудача - на резерв. Последнее через 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.
В данном случае было бы логично ввести некий новый уровень абстракции,
который описывал бы поведение в случае ошибок. Сейчас с одной стороны
в упрощённой форме оно есть в апстриме, с другой стороны оно делается
через именованные локейшны (которые размывают исходную идею с обычным
локейшнами), увеличивают размер конфига и/или ухудшают его
наглядность.
Не знаю, как часто это нужно юзерам nginx-а, если часто, то можно было
бы подумать про группы апстримов, состоящие из апстримов и описаний
поведения переключения с одного апстрима на другой.
--
С уважением,
Михаил mailto:postmaster at softsearch.ru
Подробная информация о списке рассылки nginx-ru