【发布时间】:2016-08-12 00:34:57
【问题描述】:
我将 AWS Elastic Beanstalk 与 Elastic Load Balancer (ELB) 后面的 EC2 服务器一起使用。
我在 ELB 上启用了“粘性会话”,因为这是让 django 用户会话正常工作的唯一方法。但是,在流量高峰期间,这会导致问题,因为 ELB 不再平均分配每个传入请求。这通常会像迷你 DDOS 一样使 1 台服务器过载。
我想做的是使用服务器端用户会话,其中用户身份验证信息存储在我的 Redis 缓存中。我尝试将SESSION_ENGINE 设置为很多东西,例如:
SESSION_ENGINE = 'redis_sessions.session'
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
然后,当我关闭粘性会话时,我无法登录,因为请求最终会发送到不同的服务器,其中一些请求经过身份验证,而另一些则没有。那些不是,将我重定向回登录页面。
以下是我的其他一些相关设置:
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',
...,
)
我做错了什么?非常感谢。
【问题讨论】:
-
我在 AWS ECS 上遇到了类似的问题。如果我在单个实例上运行多个 docker 容器,我会经常被重定向到登录,具体取决于哪个容器拾取它。我正在使用多端口映射来充分利用我的实例,但似乎正在破坏 django 中的会话。
标签: django load-balancing amazon-elastic-beanstalk django-sessions sticky-session