Cookie как механизм для выбора upstream
Материал из База знаний
С помощью данного механизма можно принудительно выбирать 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;