hash

Директива 'hash' задает алгоритм хеширования, используемый для распределения запросов на upstream-серверы в NGINX. — NGINX HTTP Core

hash
upstream
Синтаксисhash key [algorithm];
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core
Аргументы1-2

Описание

Директива 'hash' используется в контексте 'upstream' для определения алгоритма хеширования для распределения клиентских запросов по заданным upstream-серверам. Этот механизм позволяет NGINX управлять балансировкой нагрузки между несколькими backend-службами на основе хеша ключа, которым обычно является IP-адрес или другие указанные данные. Директива может принимать один или два аргумента. Первый аргумент — это ключ, который хешируется, а необязательный второй аргумент позволяет указать конкретный алгоритм (например, 'consistent'). Поведение по умолчанию использует простой алгоритм хеширования, но указание алгоритма может дать детерминированные результаты, улучшающие сохранность сессий. При использовании директивы 'hash' следует учитывать различные факторы, такие как количество upstream-серверов и требования к аффинности сессий, для обеспечения оптимальной производительности. Директива гарантирует, что запросы от одного и того же клиента (на основе ключа хеша) последовательно направляются на один и тот же upstream-сервер, что особенно полезно для приложений с сохранением состояния, которые зависят от того, что данные сессии хранятся локально на конкретном сервере.

Пример конфига

upstream backend {
    hash $remote_addr;
    server backend1.example.com;
    server backend2.example.com;
}

При использовании нестандартного hash algorithm убедитесь в совместимости с вашими upstream server configurations.

Ошибочные настройки session persistence могут привести к неравномерному load distribution или повышенной задержке.

Не забудьте проверить client key selection, чтобы предотвратить hash collisions, которые могут негативно повлиять на load balancing behavior.