使用 Elasticache 在 Elastic Beanstalk 上未收到任何 cookie

Posted

技术标签:

【中文标题】使用 Elasticache 在 Elastic Beanstalk 上未收到任何 cookie【英文标题】:No cookie received on Elastic Beanstalk with Elasticache 【发布时间】:2018-02-22 22:06:23 【问题描述】:

问题:

在弹性 beanstalk 上登录我部署的 Node 应用程序后,我从未收到 cookie,并且每当我通过浏览器刷新页面时,我都会被注销。

这是我的快速会话设置:

app.use(session(
    store: new RedisStore(
      client: redisClient,
      host: process.env.REDIS_HOST,
      port: process.env.REDIS_PORT
    ),
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: false // No cookie received until successful login
));

开发中(登录后):

生产中(登录后):

因此,虽然我能够“登录”,但我无法通过刷新进行持久会话,因为从来没有发回 cookie。

我排除的可能原因:

Elasticache:我已经用 redis 设置了一个 elasticache 实例。

安全组:我已将其入站安全组配置为接受来自弹性 beanstalk 安全组的传入 TCP 连接。我什至通过使用 ssh 连接到 beanstalk、安装 redis-cli 并成功连接到主端点来测试这一点。

负载均衡器:我的弹性 beanstalk 实例目前是单节点,不使用负载均衡,但即使我使用应用程序控制的粘性会话负载均衡,结果也是一样的。

你们知道哪里出了问题吗?

【问题讨论】:

【参考方案1】:

问题出在我的配置中:

将“client”作为“new RedisStore”中的键会覆盖同级“host”和“port”键。

正确的配置如下:

const redisClient = redis.createClient(
  host: process.env.REDIS_HOST,
  port: process.env.REDIS_PORT
);

app.use(session(
  store: new RedisStore(
    client: redisClient
  ),
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false
));

【讨论】:

以上是关于使用 Elasticache 在 Elastic Beanstalk 上未收到任何 cookie的主要内容,如果未能解决你的问题,请参考以下文章

将 ElastiCache 连接到 Elastic Beanstalk 实例

Django Channels 2.4 和 Websockets 在 Elastic Beanstalk 和 ElastiCache 上给出 502 错误

如何知道我是不是需要使用 AWS Elasticache 和 AWS Elastic Load Balancing?

在 AWS 上使用 ElastiCache 和 ElasticBeanstalk 配置 Redis

使用elasticache的日志中的DNS错误

扩展 AWS 预留实例(EC2、Elasticache、Aurora)