Re: Управление бэкендами
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: Управление бэкендами
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: Управление бэкендами
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: Управление бэкендами
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: Управление бэкендами
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: Управление бэкендами
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: Управление бэкендами
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: Управление бэкендами
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: Управление бэкендами
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: Управление бэкендами
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: Управление бэкендами
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