5

Używam AWS Elastic Beanstalk z serwerami EC2 za Elastic Load Balancer (ELB).Sesje użytkownika Django z klejem Load Balancer AWS wyłączone

Mam "klejące sesje" na włączonym ELB, ponieważ jest to jedyny sposób, w jaki można uzyskać sesje użytkowników django, aby działały poprawnie. Jednak w czasie szczytowego natężenia ruchu powoduje to problemy, ponieważ ELB nie rozdziela równomiernie każdego przychodzącego żądania. Zwykle przeciąża 1 serwer jak mini DDOS.

Chciałbym użyć sesji użytkownika po stronie serwera, w których informacje o uwierzytelnianiu użytkownika są przechowywane w pamięci podręcznej Redis. Próbowałem ustawienie SESSION_ENGINE do wielu rzeczy, takich jak:

SESSION_ENGINE = 'redis_sessions.session' 
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' 
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' 

Następnie po włączeniu sesje lepkie off, nie mogę się zalogować, ponieważ wnioski skończyć się na różnych serwerach, gdzie niektóre żądania są uwierzytelniane i inne nie. Te, które nie są, przekieruj mnie z powrotem na stronę logowania.

Oto kilka innych istotnych ustawienia mam:

INSTALLED_APPS = (
    ..., 
    'django.contrib.sessions', 
    ..., 
) 
MIDDLEWARE_CLASSES = ( 
    ..., 
    'djangosecure.middleware.SecurityMiddleware', 
    ..., 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    ..., 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    ..., 
) 

Co robię źle? Wielkie dzięki.

Odpowiedz

0

Czy jesteś pewien, że wszystkie twoje serwery rzeczywiście łączą się z tą samą współużytkowaną instancją redis, np. W sieci takiej jak AWS ElastiCache (a nie domyślnie na czymś w swoich lokalnych hostach)?

Jeśli używasz SESSION_ENGINE = 'django.contrib.sessions.backends.cache' następnie upewnij się, że pamięć podręczna to wykorzystuje zestaw do zawartości pamięci cache Redis skonfigurowanego w CACHES, może z SESSION_CACHE_ALIAS jeśli nie default.

Powiązane problemy