ip_hash

Директива `ip_hash` обеспечивает сохранение сессий, направляя запросы с одного и того же IP-адреса клиента на один и тот же сервер в группе upstream. — NGINX HTTP Core

ip_hash
upstream
Синтаксисip_hash;
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core
Аргументыnone

Описание

Директива `ip_hash` используется в контексте блока `upstream` в конфигурации NGINX для обеспечения стабильного балансирования нагрузки на основе IP-адресов клиентов. Включив `ip_hash`, NGINX вычисляет хеш от IP-адреса клиента, чтобы определить, какой сервер внутри группы upstream должен обработать запрос. Это означает, что пользователь с одним и тем же IP будет всегда направляться на один и тот же бэкенд-сервер в течение сессии, что позволяет поддерживать состояние сессий без необходимости привязки через файлы cookie. Маршрутизация запросов осуществляется применением хеш-функции к IP-адресу клиента, что гарантирует, что IP-адреса последовательно разрешаются в один и тот же сервер. Если запрос исходит от другого клиента (по IP), он может быть направлен на другой сервер из набора upstream. Эта возможность особенно полезна для поддержания согласованности сессий в приложениях, которые сами по себе не управляют сессиями и чувствительны к выбору сервера. Следует иметь в виду, что в окружениях, где клиенты находятся за прокси или балансировщиками нагрузки, потребуется корректная конфигурация `real_ip` или соответствующая обработка, чтобы использовать правильный IP-адрес клиента для хеширования.

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

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

Убедитесь, что upstream servers способны обрабатывать сессии независимо, так как `ip_hash` не разделяет состояние между серверами.

Использование `ip_hash` может привести к неравномерному распределению нагрузки между серверами, особенно в случаях, когда некоторые IPs отправляют больше трафика, чем другие.