Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

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. При падении или добавлении нового сервера перераспределяется лишь минимальная часть ключей сессий, а не весь пул.

Полезные материалы
Рекомендуем