Модуль 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 |
|
запрос не содержит информации о привязке к серверу |
|
запрос с привязкой отправлен на соответствующий сервер |
|
запрос с привязкой отправлен на сервер, выбранный по алгоритму балансировки |
Статусы нескольких ответов разделяются запятыми и двоеточиями подобно адресам в переменной $upstream_addr.