应采用Redis后端Session存储、Nginx Session粘滞、JWT无状态Token或共享存储同步四种方式实现WorkBuddy多节点Session共享,分别适用于容器化、轻量部署、云原生及传统集群场景。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您已完成WorkBuddy基础安装,但在多节点或分布式环境中无法保持用户会话状态一致,则可能是Session未正确共享所致。以下是实现Session共享的多种可行配置方式:
一、启用Redis后端Session存储
该方法通过将Session数据统一托管至外部Redis实例,确保所有WorkBuddy服务节点读写同一份会话状态,适用于容器化或微服务部署场景。
1、在目标服务器上安装并启动Redis服务,确认监听地址为127.0.0.1:6379或指定内网IP端口。
2、获取WorkBuddy服务配置目录下的application.yml文件(通常位于config/子目录)。
3、在spring.session.store-type字段下设置值为redis。
4、在spring.redis.host与spring.redis.port中填入实际Redis服务地址与端口。
5、若Redis启用了密码认证,在spring.redis.password中填入对应密钥。
6、重启WorkBuddy服务进程,验证日志中出现Initialized RedisSessionRepository字样即表示生效。
二、配置Nginx反向代理级Session粘滞
该方法不依赖外部存储,而是通过负载均衡器将同一客户端IP或Cookie标识的请求持续分发至固定后端节点,维持本地Session有效性,适合无Redis基础设施的轻量部署。
1、编辑Nginx主配置文件中WorkBuddy上游服务块,添加ip_hash;指令启用基于客户端IP的哈希路由。
2、若需更高精度的会话绑定,改用sticky cookie模块(需编译支持),配置如:sticky cookie srv_id expires=1h domain=.workbuddy.local path=/;。
3、确保所有WorkBuddy后端节点使用相同的应用上下文路径(如均部署在/而非/v1)。
4、在WorkBuddy各节点的application.yml中将server.servlet.context-path设为空或统一值。
5、重载Nginx配置:nginx -s reload,并检查响应头中是否携带Set-Cookie: srv_id=...。
三、启用JWT Token无状态Session机制
该方法彻底消除服务端Session存储依赖,将用户身份与权限信息加密嵌入HTTP请求头中的JWT,由各节点独立校验,适用于高可用、弹性伸缩的云原生架构。
1、在WorkBuddy管理后台进入「安全设置」→「认证模式」,切换为「JWT Token认证」。
2、生成RSA密钥对,将私钥存于config/jwt/private.key,公钥存于config/jwt/public.key。
3、在application.yml中配置jwt.public-key-location指向公钥路径。
4、设置jwt.token-validity-in-seconds为期望有效期(如3600)。
5、客户端首次登录成功后,必须将返回的Authorization: Bearer <token>完整携带于后续所有请求Header中。
6、验证任意节点接收到带有效JWT的请求时,能正常解析用户主体且无需查库。
四、同步本地Session文件至共享存储
该方法适用于传统虚拟机或物理机集群,通过将各节点的Session序列化文件挂载至同一NFS或SMB共享目录,实现文件级一致性。
1、部署并挂载网络文件系统,例如将//nas/workbuddy-session挂载至每台服务器的/var/lib/workbuddy/session。
2、修改各节点application.yml中server.session.persistent为true。
3、设置server.session.store-dir为挂载路径/var/lib/workbuddy/session。
4、确认所有节点对该目录具备读写权限,且UID/GID一致(如均使用workbuddy:workbuddy)。
5、关闭各节点本地Session过期清理任务,避免误删其他节点正在使用的文件。
6、启动首个节点,观察共享目录中生成session-*.ser文件;再启动第二节点,确认其能加载已有会话。


















