Cookie как механизм для выбора upstream — различия между версиями
Материал из База знаний
Admin (обсуждение | вклад) (Новая страница: «category:Nginx * С помощью данного механизма можно принудительно выбирать upstream, на который бу…») |
Admin (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
[[category:Nginx]] | [[category:Nginx]] | ||
− | + | '''С помощью данного механизма можно принудительно выбирать upstream, на который будет переправлен запрос.''' | |
+ | |||
+ | Выделяем каждый backend в отдельную upstream секцию(лучше это сделать в отдельном config): | ||
+ | <pre> | ||
+ | # Конфигурация Upstream для mysite.example.ru | ||
+ | |||
+ | upstream my-app { | ||
+ | server 10.10.1.21:443 max_fails=30 fail_timeout=10s; | ||
+ | server 10.10.1.22:443 max_fails=30 fail_timeout=10s; | ||
+ | server 10.10.1.23:443 max_fails=30 fail_timeout=10s; | ||
+ | ## server 127.0.0.1:481; # Заглушка (на время обслуживания) | ||
+ | } | ||
+ | |||
+ | upstream my-app-1 { | ||
+ | server 10.10.1.21:443; | ||
+ | } | ||
+ | upstream my-app-2 { | ||
+ | server 10.10.1.22:443; | ||
+ | } | ||
+ | upstream my-app-3 { | ||
+ | server 10.10.1.23:443; | ||
+ | } | ||
+ | upstream my-app-4 { | ||
+ | server 10.10.1.24:443; | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | В основном конфиге пропишем примерно так: | ||
+ | <pre> | ||
+ | # upstream по умолчанию | ||
+ | set $app_upstream_selected https://my-app; | ||
+ | # Если установлен Cookie, и он в пределах [1-4] отправим на конкретный upstream | ||
+ | if ($cookie_MYAPP ~* "^([1-4])$") { | ||
+ | set $app_num "$1"; | ||
+ | set $app_upstream_selected https://my-$app_num; | ||
+ | } | ||
+ | |||
+ | location / { | ||
+ | # Установим Cookie, если пошли по пути /app-[1-4] в значение номера бекенда. | ||
+ | if ($request_uri ~* "^/app-([1-4])$") { | ||
+ | set $app_num "$1"; | ||
+ | add_header Set-Cookie "myapp=$app_num; Max-Age=86400"; # Время жизни в секундах | ||
+ | rewrite ^ https://$host; | ||
+ | } | ||
+ | if ($request_uri ~* "^/app-all$") { | ||
+ | add_header Set-Cookie "myapp=0; Max-Age=1"; | ||
+ | rewrite ^ https://$host; | ||
+ | } | ||
+ | |||
+ | |||
+ | proxy_pass $app_upstream_selected; | ||
+ | </pre> |
Текущая версия на 09:32, 28 марта 2025
С помощью данного механизма можно принудительно выбирать upstream, на который будет переправлен запрос.
Выделяем каждый backend в отдельную upstream секцию(лучше это сделать в отдельном config):
# Конфигурация Upstream для mysite.example.ru upstream my-app { server 10.10.1.21:443 max_fails=30 fail_timeout=10s; server 10.10.1.22:443 max_fails=30 fail_timeout=10s; server 10.10.1.23:443 max_fails=30 fail_timeout=10s; ## server 127.0.0.1:481; # Заглушка (на время обслуживания) } upstream my-app-1 { server 10.10.1.21:443; } upstream my-app-2 { server 10.10.1.22:443; } upstream my-app-3 { server 10.10.1.23:443; } upstream my-app-4 { server 10.10.1.24:443; }
В основном конфиге пропишем примерно так:
# upstream по умолчанию set $app_upstream_selected https://my-app; # Если установлен Cookie, и он в пределах [1-4] отправим на конкретный upstream if ($cookie_MYAPP ~* "^([1-4])$") { set $app_num "$1"; set $app_upstream_selected https://my-$app_num; } location / { # Установим Cookie, если пошли по пути /app-[1-4] в значение номера бекенда. if ($request_uri ~* "^/app-([1-4])$") { set $app_num "$1"; add_header Set-Cookie "myapp=$app_num; Max-Age=86400"; # Время жизни в секундах rewrite ^ https://$host; } if ($request_uri ~* "^/app-all$") { add_header Set-Cookie "myapp=0; Max-Age=1"; rewrite ^ https://$host; } proxy_pass $app_upstream_selected;