Перейти к содержанию

sticky: Модуль NGINX для стикер-куки

Установка на Debian/Ubuntu

Эти документы относятся к APT пакету nginx-module-sticky, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT репозиторий, как описано в настройке APT репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-sticky
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия            | Компонент   | Архитектуры    |
|-------------|-------------------|-------------|-----------------|
| debian      | bookworm          | main        | amd64, arm64    |
| debian      | bookworm-mainline | main        | amd64, arm64    |
| debian      | trixie            | main        | amd64, arm64    |
| debian      | trixie-mainline   | main        | amd64, arm64    |
| ubuntu      | focal             | main        | amd64, arm64    |
| ubuntu      | focal-mainline    | main        | amd64, arm64    |
| ubuntu      | jammy             | main        | amd64, arm64    |
| ubuntu      | jammy-mainline    | main        | amd64, arm64    |
| ubuntu      | noble             | main        | amd64, arm64    |
| ubuntu      | noble-mainline    | main        | amd64, arm64    |

измененная и расширенная версия; смотрите Changelog.txt

Описание

Модуль nginx для добавления стикер-куки, который всегда будет передаваться к одному и тому же внешнему серверу.

При работе с несколькими бэкенд-серверами иногда полезно, чтобы один клиент (браузер) всегда обслуживался одним и тем же бэкенд-сервером (например, для сохранения сессии).

Использование сохранения по IP (с помощью модуля upstream ip_hash) может быть не хорошей идеей, потому что могут возникнуть ситуации, когда много разных браузеров приходят с одним и тем же IP-адресом (за прокси) и система балансировки нагрузки не будет справедливой.

Использование куки для отслеживания внешнего сервера делает каждый браузер уникальным.

Когда модуль sticky не может быть применен, он переключается обратно на классический Round Robin Upstream или возвращает "Bad Gateway" (в зависимости от флага no_fallback).

Модуль Sticky не может быть применен, когда куки не поддерживаются браузером.

Модуль Sticky основан на алгоритме "с наилучшим усилием". Его цель - не решать проблемы безопасности каким-либо образом. Он создан для того, чтобы обеспечить нормальным пользователям всегда перенаправление на один и тот же бэкенд-сервер: это все!

Использование

upstream {
  sticky;
  server 127.0.0.1:9000;
  server 127.0.0.1:9001;
  server 127.0.0.1:9002;
}

  sticky [hash=index|md5|sha1] [no_fallback]
       [name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
   или
  sticky [hmac=md5|sha1 hmac_key=<foobar_key>] [no_fallback]
       [name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
   или
  sticky [text=raw] [no_fallback]
       [name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];

Алгоритм выбора сервера: - hash: механизм хеширования для кодирования внешнего сервера. Не может использоваться с hmac или text. по умолчанию: md5

- md5|sha1: хорошо известные хеши
- index:    не хешируется, вместо этого используется индекс в памяти, это быстрее и накладные расходы меньше
Предупреждение: сопоставление с списком внешних серверов
непоследовательно. Таким образом, при перезагрузке, если внешние серверы
изменились, значения индекса не гарантированы
соответствовать тому же серверу, что и раньше!
ИСПОЛЬЗУЙТЕ С ОСТОРОЖНОСТЬЮ и только если это необходимо!
  • hmac: механизм HMAC хеширования для кодирования внешнего сервера Это похоже на механизм хеширования, но использует hmac_key для обеспечения безопасности хеширования. Не может использоваться с hash или text. md5|sha1: хорошо известные хеши

  • hmac_key: ключ для использования с hmac. Обязателен, когда установлен hmac

  • no_fallback: когда этот флаг установлен, nginx вернет 502 (Bad Gateway или Proxy Error), если запрос приходит с куки и соответствующий бэкенд недоступен. Вы можете установить его в блок upstream или задать "sticky_no_fallback" в блоке сервера или блоке местоположения.

Настройки куки: - name: имя куки, используемой для отслеживания постоянного внешнего srv; по умолчанию: route

  • domain: домен, в котором куки будут действительны по умолчанию: ничего. Позвольте браузеру обрабатывать это.

  • path: путь, в котором куки будут действительны по умолчанию: /

  • expires: продолжительность действия куки по умолчанию: ничего. Это куки сессии. ограничение: должно быть длительность более одной секунды

  • secure включить безопасные куки; передаются только через https

  • httponly включить куки так, чтобы они не утекали через js

Механизм деталей

  • смотрите docs/sticky.{vsd,pdf}

Проблемы и предупреждения:

  • при использовании различных конфигураций upstream с стикерностью, которые используют один и тот же домен, но ссылаются на разные местоположения - конфигурации может быть разумно установить другой путь / маршрут - опцию на каждом из этих конфигураций upstream, как описано здесь: https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/issue/7/leaving-cookie-path-empty-in-module

  • модуль sticky не работает с опцией "backup" элемента конфигурации "server".

  • модуль sticky может работать с nginx_http_upstream_check_module (начиная с версии 1.2.3)

Загрузки

  • архивы доступны через теги из репозитория: https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/downloads