Mam aplikację działającą w dwóch różnych instancjach AWS i chciałbym włączyć sesje „lepkie” lub „trwałe” oparte na IP, aby w szczególny sposób móc korzystać z technologii gniazd sieciowych.
Mam dwie różne konfiguracje, z których obie wymagają użycia, ip_hash
aby umożliwić te lepkie sesje.
W pierwszej instalacji procesy aplikacji działają w tej samej instancji, co konfiguracja Nginx. To jest praca , sesje są trwałe, jak oczekiwano.
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;
}
W drugiej konfiguracji wskazuję na instancje zewnętrzne i staram się osiągnąć ten sam efekt. Ta konfiguracja nie działa . Innymi słowy, sesje wciąż są równoważone obciążeniem.
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;
}
Czy używam ip_hash
poprawnie? Jak mogę włączyć „lepkie” sesje IP dla serwerów zewnętrznych?
nginx
load-balancing
sticky-sessions
Himmel
źródło
źródło
Odpowiedzi:
Mój serwer był za równoważeniem obciążenia AWS, więc musiałem przekazać odpowiednie nagłówki do nadrzędnego, aby zawsze odzwierciedlało adres IP klienta. Następująca konfiguracja naprawiła mój problem (patrz skomentowany wiersz):
źródło
Zgodnie z dokumentacją Nginx obsługa sesji lepkich jest dostępna tylko dla ich drogiej wersji Plus. Badam alternatywy i im bliżej jestem tego starego widelca, który nie jest kompatybilny z Nginx 1.5+ https://github.com/lusis/nginx-sticky-module
Próbowałem także zbudować moduł LUA, ale nie ma żadnych haczyków API do wyboru równorzędnego, tylko do wyliczania i blokowania.
Równoważenie obciążenia Nginx Plus
Aktualizacja
Znalazłem kolejny świetny moduł, patrz https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src
źródło