Re: Управление бэкендами

Валентин Бартенев vbart at nginx.com
Fri Nov 1 12:47:32 UTC 2013


On Friday 01 November 2013 16:41:47 Sergey Kobzar wrote:
> On 11/01/13 14:32, Валентин Бартенев wrote:
> > On Friday 01 November 2013 16:23:32 Sergey Kobzar wrote:
> >> Приветсвую
> >> 
> >> Nginx стоит как frontend. За ним находится несколько десятков или более
> >> бэкендов (разные servername). Необходимо динамически управлять на какой
> >> бэкенд запрос упадет.
> >> 
> >> Править nginx.conf и перечитывает его не вариант, т.к. это может
> >> происходить ежесекундно.
> >> 
> >> Думал хранить соответствие servername -> backend в memcached, но nginx
> >> похоже только умеет доставать http response и memcached.
> >> 
> >> Остается только Nginx -> Perl -> Memcached. Или есть еще варинаты? lua?
> > 
> > Самый лучший вариант - X-Accel-Redirect, смотрите например в описании
> > директивы proxy_ignore_headers.
> > 
> > http://nginx.org/r/proxy_ignore_headers/ru
> 
> Валентин, спасибо.
> Не совсем понял как это применить на практике. Т.е. мне все-равно нужно
> как-то динамически управлять на какой backend перенапрявлять запрос.
> 
> P.S. Состоянием бэкендов управляет дополнительный сервер. На нем можно
> выдавать или состояние бэкенда или на какой бэкенд запрос перенаправить.
> Но что-то я не соображу как это дело применить...
> 

Зависит от того, что вам требуется.  Как я первоначально понял ваш вопрос,
требуется на каждый запрос решать на какой сервер он пойдет.

В этом случае вы сначала с помощью proxy_pass/fastcgi_pass направляете
запрос на скрипт/сервер/приложение/базу - который решает на какой бэкенд
его отправить и возвращает в заголовках X-Accel-Redirect с указанием
бэкенда.

Далее у вас есть internal location, в котором тот же proxy_pass/fastcgi_pass
с переменной и запрос отправляется на нужный сервер.

--
Валентин Бартенев


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