У меня есть приложение, которое работает на двух разных экземплярах AWS, и я хотел бы включить «липкие» или «постоянные» сеансы на основе IP, чтобы я мог особым образом воспользоваться преимуществами технологий веб-сокетов.
У меня есть две разные установки, которые обе включают использование ip_hash
для включения этих липких сессий.
В первой настройке процессы приложения выполняются в том же экземпляре, что и конфигурация Nginx. Это работает , сеансы являются постоянными, как и ожидалось.
upstream my_app {
ip_hash;
# local servers
server 127.0.0.1:3001 weight=100 max_fails=5 fail_timeout=300;
server 127.0.0.1:3002 weight=100 max_fails=5 fail_timeout=300;
keepalive 8;
}
Во второй настройке я указываю на внешние экземпляры и пытаюсь добиться того же эффекта. Эта установка не работает . Другими словами, сессии все еще находятся в режиме балансировки нагрузки.
upstream my_app {
ip_hash;
# external servers
server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
keepalive 8;
}
Я ip_hash
правильно использую ? Как включить «липкие» сеансы на основе ip для внешних серверов?
Ответы:
Мой сервер находился за балансировкой нагрузки AWS, поэтому мне нужно было передавать правильные заголовки в восходящий поток, чтобы он всегда отражал IP-адрес клиента. Следующая конфигурация исправила мою проблему (см. Закомментированную строку):
источник
Согласно документации Nginx, поддержка Sticky session доступна только для их дорогой версии Plus. Я изучал альтернативы, и чем ближе я был, тем старым форком, который не совместим с Nginx 1.5+ https://github.com/lusis/nginx-sticky-module
Я также попытался построить модуль LUA, но нет никаких хуков API для выбора одноранговых узлов, только для перечисления и блокировки.
Nginx Plus Балансировка нагрузки
Обновить
Я нашел другой отличный модуль, см. Https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src
источник