Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
STICKY_SESSION_FAIL Linux / DevOps

Настройка балансировки нагрузки со Sticky Sessions в Nginx (Session Persistence)

Обновлено: 21.08.2026
  • Пользователи внезапно разлогиниваются или теряют корзину при переходе между страницами из-за переключения ноды балансировки.
  • Сессии PHP/Java не реплицируются между бэкенд-серверами.
  • Неравномерное распределение трафика при использовании классического ip_hash за общими корпоративными NAT-шлюзами.

1. Способ 1: Использование алгоритма ip_hash

Привязка запросов на основе клиентского IP-адреса:

upstream backend_cluster {
    ip_hash;
    server 192.168.1.10:8080 weight=1 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 weight=1 max_fails=3 fail_timeout=30s;
    server 192.168.1.12:8080 down; # Маркировка временно выведенной ноды
}

2. Способ 2: Консистентное хеширование по Cookie (Sticky Session в Open Source)

Привязка запроса к значению Cookie сессии (например, PHPSESSID или JSESSIONID):

upstream backend_cluster {
    # Хеширование по значению cookie сессии с консистентным распределением
    hash $cookie_PHPSESSID consistent;
    
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

3. Конфигурация проксирования в server блоке

server {
    listen 443 ssl http2;
    server_name app.itstm.ru;

    location / {
        proxy_pass http://backend_cluster;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout http_502 http_503;
    }
}

4. Применение настроек

nginx -t && systemctl reload nginx
Практический опыт инженера: Если вам нужно временно отключить ноду в upstream с ip_hash, никогда не удаляйте строку из конфига! Пометьте ее флагом 'down', чтобы не нарушить хеш-суммы текущих привязок остальных серверов.

Частые вопросы (FAQ)

В чем недостаток ip_hash перед cookie hashing?

Если тысячи пользователей заходят из одной корпоративной сети или мобильного оператора через один внешний NAT IP, ip_hash направит их всех на один бэкенд-сервер, перегрузив его.

Что делает параметр 'consistent' в директиве hash?

Он использует алгоритм Ketama Consistent Hashing. При падении или добавлении нового сервера перераспределяется лишь минимальная часть ключей сессий, а не весь пул.