Cookie как механизм для выбора upstream — различия между версиями

Материал из База знаний
Перейти к: навигация, поиск
(Новая страница: «category:Nginx * С помощью данного механизма можно принудительно выбирать upstream, на который бу…»)
 
 
Строка 1: Строка 1:
 
[[category:Nginx]]
 
[[category:Nginx]]
* С помощью данного механизма можно принудительно выбирать upstream, на который будет переправлен запрос.
+
'''С помощью данного механизма можно принудительно выбирать 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;