【问题标题】:Django user sessions with AWS Load Balancer stickiness turned off关闭了 AWS 负载均衡器粘性的 Django 用户会话
【发布时间】: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


【解决方案1】:

如果您想在多个服务器上实现 django 应用程序的负载平衡,则不能直接使用默认会话身份验证方法,因为它使用内存作为会话存储。在这种情况下发生的情况是,当您登录到其中一个实例时,此状态将存储在该特定服务器的内存中。如果您的下一个请求发送到不同的服务器,您将被显示为未经身份验证。

这里的解决方案是使用不同的会话存储机制,可以在多个服务器之间共享。一个例子是使用 redis 作为会话存储。然后两台服务器都可以连接到同一个 redis 实例并具有相同的会话状态。

该链接解释了如何实现这一点 - http://michal.karzynski.pl/blog/2013/07/14/using-redis-as-django-session-store-and-cache-backend/

【讨论】:

    【解决方案2】:

    您确定您的所有网络服务器实际上都连接到同一个共享 redis 实例,例如:在 AWS ElastiCache 之类的网络上(而不是默认为其本地主机上的某些东西)?

    如果您使用SESSION_ENGINE = 'django.contrib.sessions.backends.cache',请确保它使用的缓存设置为您在CACHES 中配置的redis 缓存,如果不是default,则可能使用SESSION_CACHE_ALIAS

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 2013-04-18
      • 2017-10-22
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 2016-01-01
      相关资源
      最近更新 更多