使用 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?