我使用带有redis连接和nginx代理的快速会话模块。如果我使用secure:false,则设置sid cookie。但是,如果我将其设置为安全,则不会。我用express和secure直接设置了另一个cookie:true并且它有效。
Express中的Express-Session配置:
//proxy configuration
app.set('trust proxy', 1); // trust first proxy (ngnix proxy)
//session
app.use(session({
secret: 'to-secret-to-show',
resave: false,
saveUninitialized: true,
rolling: true,
cookie: {
httpOnly: true,
sameSite: 'strict',
secure: secure
},
store: new RedisSessionStore({
client: redis,
ttl: 86400, //time to life, one day
}),
}));
如果将secure设置为true或false依赖于envirement。我尝试将其直接设置为true,但不会创建一个chnage。
nginx代理设置:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
#proxy_set_header X-Forwarded-Host $http_host;
proxy_pass http://nodejs;
proxy_redirect off;
当我查看Dokumentation文件时,它应该是正确的。我忘记了什么吗?我无法进行繁重的测试,因为我只有我的带有安全连接的实时系统。
答案 0 :(得分:1)
尝试添加X-Forwarded-Proto
标题:
proxy_set_header X-Forwarded-Proto $scheme;
这是express-session
确定与nginx的连接是否安全的方式。