Модуль http_upstream_sticky#

Добавлено в версии 1.1.0.

Позволяет обеспечить привязку всех запросов внутри клиентской сессии к единственному серверу в группе upstream.

Пример конфигурации#

upstream backend {
    server backend1.example.com:8080;
    server backend2.example.com:8080;

    sticky cookie cookie_name domain=example.com secure;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

Директивы#

sticky#

Синтаксис:

sticky cookie name [attr1=value] [attr2=value] [attr3] …;
sticky route $variable [$variable2] [$variable3] …;

Умолчание:

Контекст:

upstream

Сконфигурировать привязку клиентских сессий можно одним из режимов: cookie или route указанием первого параметра.

cookie: данные о назначенном сервере передаются в HTTP куке, сгенерированной Angie.

Атрибуты куки можно назначать, единственный атрибут, устанавливаемый по умолчанию, — path=/. Для назначения атрибутов куки можно использовать строки, переменные и их комбинации. Чтобы снять атрибут, достаточно сконфигурировать его с пустым значением: attr=. К примеру, со sticky cookie path= Angie установит куку без атрибута path.

upstream backend {
    server backend1.example.com:8080;
    server backend2.example.com:8080;

    sticky cookie example domain=$my_domain max-age=3600;
}

route: проксируемый сервер назначает клиенту route в начале сессии.

Все последующие запросы от этого клиента будут содержать route в куке или в URI. Эта информация сопоставляется с параметром sid директивы server для определения сервера, на который будет проксирован запрос.

upstream backend {
    server backend1.example.com:8080 sid="server1";
    server backend2.example.com:8080 sid="server2";

    sticky route $http_route $cookie_route;
}

Значением куки является MD5-хэш IP-адреса и порта (или пути UNIX-сокета) в шестнадцатеричном виде. При этом,

  • если в директиве server указан параметр sid, значение куки будет значение параметра sid;

  • если сконфигурирована директива sticky_secret, её значение будет использовано в качестве соли при хэшировании.

sticky_strict#

Синтаксис:

sticky_strict on | off;

Умолчание:

sticky_strict off;

Контекст:

upstream

Позволяет возвращать ошибку 502 в случаях, когда назначенный клиенту сервер в апстриме недоступен.
По умолчанию из группы серверов выбирается другой доступный сервер.

sticky_secret#

Синтаксис:

sticky_secret $complex_value;

Умолчание:

Контекст:

upstream

Добавляет соль в функцию хэширования при генерации значения куки. Параметр может быть задан с использованием переменных, например, $remote_addr:

upstream backend {
    server backend1.example.com:8080;
    server backend2.example.com:8080;

    sticky cookie cookie_name;
    sticky_secret my_secret.$remote_addr;
}

Встроенные переменные#

Модуль http_upstream_sticky поддерживает встроенные переменные:

$upstream_sticky_status#

Статус привязанного запроса.

''

запрос к upstream не обрабатывался модулем http_upstream_sticky

new

запрос не содержит информации о привязке к серверу

hit

запрос с привязкой отправлен на соответствующий сервер

miss

запрос с привязкой отправлен на сервер, выбранный по алгоритму балансировки

Статусы нескольких ответов разделяются запятыми и двоеточиями подобно адресам в переменной $upstream_addr.