5

Sto utilizzando AWS Elastic Beanstalk con server EC2 dietro un Elastic Load Balancer (ELB).Sessioni utente Django con stickiness Load Balancer AWS disattivato

Ho "sessioni appiccicose" sull'ELB abilitato perché è l'unico modo per far funzionare correttamente le sessioni utente di django. Tuttavia, durante i periodi di traffico intenso, questo causa problemi poiché l'ELB non distribuisce più ogni richiesta in entrata in modo uniforme. Solitamente questo sovraccarico 1 server come un mini DDOS.

Quello che mi piacerebbe fare è usare sessioni utente lato server dove le informazioni di autenticazione utente sono memorizzate nella mia cache Redis. Ho provato a installare SESSION_ENGINE a numerose cose come:

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

Poi, quando mi rivolgo sessioni appiccicoso fuori, io sono in grado di effettuare il login perché le richieste finiscono per andare a diversi server in cui alcune richieste vengono autenticati e gli altri non lo sono. Quelli che non lo sono, reindirizzami alla pagina di accesso.

Qui ci sono alcune altre impostazioni importanti che ho:

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', 
    ..., 
) 

Che cosa sto facendo di sbagliato? Grazie molto.

risposta

0

Sei sicuro che tutti i server Web si stiano effettivamente connettendo alla stessa istanza di Redis condivisa, ad es .: sulla rete come AWS ElastiCache (e non sul valore di default sui loro localhost)?

Se si utilizza SESSION_ENGINE = 'django.contrib.sessions.backends.cache' quindi assicurarsi che la cache utilizza impostata la cache del Redis configurato nel CACHES, magari con SESSION_CACHE_ALIAS se non default.