F5负载均衡HTTPS跨应用跳转时JSESSIONID丢失致会话失效问题
根因匹配
对应你描述的「直接访问JVM正常,走LB就异常」的特征,90%以上是F5侧对Cookie、重定向头的改写配置错误导致,具体可按以下优先级排查修改:
- 第一步:检查Cookie Domain配置
大部分同根域跨子应用跳转Cookie丢失都是这个问题:如果应用A、B的对外域名是同根域(如
a.xxx.com和b.xxx.com),F5如果给应用A的JSESSIONID配置了Domain为a.xxx.com,浏览器跳转至b.xxx.com时不会携带该Cookie。
修改方式:找到应用A绑定的HTTP Profile,将JSESSIONID的Domain属性改为根域(如.xxx.com,开头的点不可省略),保证所有子域都可读取该Cookie。
命令行配置参考:tmsh modify ltm profile http <应用A关联的HTTP Profile名称> cookie insert domain ".xxx.com"
- 第二步:调整会话保持策略为透传模式
如果应用A的F5会话保持策略用的是默认的
Cookie Insert模式,F5会主动插入自定义会话Cookie,甚至修改应用服务器原生生成的JSESSIONID的属性,导致跨应用携带失效。
修改方式:将会话保持策略改为Cookie Passive模式,F5仅透传应用服务器生成的JSESSIONID,不做任何修改,保证原有Cookie属性不变。
命令行配置参考:tmsh modify ltm persistence cookie <应用A关联的会话保持策略名称> mode passive
- 第三步:开启重定向Location头自动改写
你提到直接访问JVM跳转回应用A时落地地址为Web服务器内网地址,说明应用服务器返回的3xx重定向Location头是内网地址,F5未将其改写为对外LB域名,导致浏览器跳转时识别为不同站点,不会携带LB域名下的JSESSIONID。
修改方式:在应用A的HTTP Profile中开启Redirect Rewrite功能,选择Matching模式,自动将应用返回的内网重定向地址改写为LB对外域名。
命令行配置参考:tmsh modify ltm profile http <应用A关联的HTTP Profile名称> redirect-rewrite matching
- 第四步:验证配置生效
配置完成后清理浏览器Cookie,重新走跳转流程,用F12开发者工具的「网络」标签页查看:
- 应用A返回的JSESSIONID的Domain属性是否为根域
- 跳转回应用A时的请求头是否携带了原JSESSIONID
- 应用B跳转回应用A的Location头是否为LB对外域名
内容的提问来源于stack exchange,提问作者Code Rockstar

