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

2013-11-01 Пенетрантность Oleksandr V. Typlyns'kyi
Today Nov 1, 2013 at 14:23 Sergey Kobzar wrote:

 Приветсвую
 
 Nginx стоит как frontend. За ним находится несколько десятков или более 
 бэкендов (разные servername). Необходимо динамически управлять на какой 
 бэкенд запрос упадет.
 
 Править nginx.conf и перечитывает его не вариант, т.к. это может 
 происходить ежесекундно.

  http://nginx.org/r/upstream_conf
  Одно но:
  This directive is available as part of our commercial subscription only. 
-- 
WNGS-RIPE

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2013-11-01 Пенетрантность Валентин Бартенев
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

--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2013-11-01 Пенетрантность Sergey Kobzar

On 11/01/13 14:28, Oleksandr V. Typlyns'kyi wrote:

Today Nov 1, 2013 at 14:23 Sergey Kobzar wrote:


Приветсвую

Nginx стоит как frontend. За ним находится несколько десятков или более
бэкендов (разные servername). Необходимо динамически управлять на какой
бэкенд запрос упадет.

Править nginx.conf и перечитывает его не вариант, т.к. это может
происходить ежесекундно.


   http://nginx.org/r/upstream_conf
   Одно но:
   This directive is available as part of our commercial subscription only.


Как вариант конечно...
Вопрос к разработчикам: сколько стоит commercial subscription?

Вот еще нашел то, что мне нужно:
http://sosedoff.com/2012/06/11/dynamic-nginx-upstreams-with-lua-and-redis.html

Но насколько lua модуль стабильный и выдерживает ли он high load.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2013-11-01 Пенетрантность Валентин Бартенев
On Friday 01 November 2013 16:35:57 Sergey Kobzar wrote:
 On 11/01/13 14:28, Oleksandr V. Typlyns'kyi wrote:
  Today Nov 1, 2013 at 14:23 Sergey Kobzar wrote:
  Приветсвую
  
  Nginx стоит как frontend. За ним находится несколько десятков или более
  бэкендов (разные servername). Необходимо динамически управлять на какой
  бэкенд запрос упадет.
  
  Править nginx.conf и перечитывает его не вариант, т.к. это может
  происходить ежесекундно.
  
 http://nginx.org/r/upstream_conf
 Одно но:
 This directive is available as part of our commercial subscription
 only.
 
 Как вариант конечно...
 Вопрос к разработчикам: сколько стоит commercial subscription?
 
[..]

На сайте есть прайс: http://nginx.com/products/
и заказ онлайн https://cs.nginx.com/cart

При желании, можно попросить trial.

--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2013-11-01 Пенетрантность Sergey Kobzar

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. Состоянием бэкендов управляет дополнительный сервер. На нем можно 
выдавать или состояние бэкенда или на какой бэкенд запрос перенаправить. 
Но что-то я не соображу как это дело применить...




--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru



___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2013-11-01 Пенетрантность Валентин Бартенев
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 mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2013-11-01 Пенетрантность Sergey Kobzar

On 11/01/13 14:47, Валентин Бартенев wrote:


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


Да - так и есть.


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


Тут понял.


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


А переменную как выковырять из ответа?



--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru


___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2013-11-01 Пенетрантность Валентин Бартенев
On Friday 01 November 2013 16:54:43 Sergey Kobzar wrote:
[..]
  Далее у вас есть internal location, в котором тот же
  proxy_pass/fastcgi_pass с переменной и запрос отправляется на нужный
  сервер.
 
 А переменную как выковырять из ответа?
 

Например так: возвращаете X-Accel-Redirect: /redirect_to/198.51.100.1
и он попадает в такой location:

  location ~ ^/redirect_to/(?backend.+)$ {
  internal;
  proxy_pass http://$backend;
  }

Если нужно сохранить оригинальный URI запроса, то это делается с помощью set:

  set $original_uri $request_uri;

и proxy_pass в этом случает будет выглядеть так:

  proxy_pass http://$backend$original_uri;

--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2013-11-01 Пенетрантность Валентин Бартенев
On Friday 01 November 2013 17:02:43 Валентин Бартенев wrote:
 On Friday 01 November 2013 16:54:43 Sergey Kobzar wrote:
 [..]
 
   Далее у вас есть internal location, в котором тот же
   proxy_pass/fastcgi_pass с переменной и запрос отправляется на нужный
   сервер.
  
  А переменную как выковырять из ответа?
 
 Например так: возвращаете X-Accel-Redirect: /redirect_to/198.51.100.1
 и он попадает в такой location:
 
   location ~ ^/redirect_to/(?backend.+)$ {
   internal;
   proxy_pass http://$backend;
   }
 
 Если нужно сохранить оригинальный URI запроса, то это делается с помощью
 set:
 
   set $original_uri $request_uri;
 
 и proxy_pass в этом случает будет выглядеть так:
 
   proxy_pass http://$backend$original_uri;
 

Альтернативный, и даже наверное лучший и более простой вариант всего этого: 
использовать аналогичным образом модуль ngx_http_auth_request.

http://nginx.org/ru/docs/http/ngx_http_auth_request_module.html

--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2013-11-01 Пенетрантность Sergey Kobzar

On 11/01/13 15:02, Валентин Бартенев wrote:

On Friday 01 November 2013 16:54:43 Sergey Kobzar wrote:
[..]

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


А переменную как выковырять из ответа?



Например так: возвращаете X-Accel-Redirect: /redirect_to/198.51.100.1
и он попадает в такой location:

   location ~ ^/redirect_to/(?backend.+)$ {
   internal;
   proxy_pass http://$backend;
   }

Если нужно сохранить оригинальный URI запроса, то это делается с помощью set:

   set $original_uri $request_uri;

и proxy_pass в этом случает будет выглядеть так:

   proxy_pass http://$backend$original_uri;


Теперь все понятно. Спасибо!



--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru



___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2013-11-01 Пенетрантность Sergey Kobzar

On 11/01/13 15:09, Валентин Бартенев wrote:

On Friday 01 November 2013 17:02:43 Валентин Бартенев wrote:

On Friday 01 November 2013 16:54:43 Sergey Kobzar wrote:
[..]


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


А переменную как выковырять из ответа?


Например так: возвращаете X-Accel-Redirect: /redirect_to/198.51.100.1
и он попадает в такой location:

   location ~ ^/redirect_to/(?backend.+)$ {
   internal;
   proxy_pass http://$backend;
   }

Если нужно сохранить оригинальный URI запроса, то это делается с помощью
set:

   set $original_uri $request_uri;

и proxy_pass в этом случает будет выглядеть так:

   proxy_pass http://$backend$original_uri;



Альтернативный, и даже наверное лучший и более простой вариант всего этого:
использовать аналогичным образом модуль ngx_http_auth_request.

http://nginx.org/ru/docs/http/ngx_http_auth_request_module.html


Хм. А этот модуль при чем? Мне не нужно авторизовывать пользователей.



--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru



___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru