單機多 Tomcat 正常,跨機器部署後「啟動兩個 Tomcat 就登入失敗、被攔截到登入頁」,典型的 Session 不共享 導致。
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
# application.yml
spring:
session:
store-type: redis
redis:
host: redis-host
port: 6379
# nginx.conf
upstream tomcat_cluster {
ip_hash; # 同一 IP 永遠分發到同一台
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
server.xml 配置 <Cluster>、<Manager className="org.apache.catalina.ha.session.DeltaManager"/>。jvmRoute 不同 (如 tomcatA, tomcatB)。proxy_set_header 傳遞 X-Forwarded-For、Host。SESSIONID Cookie Domain/Path 設定正確。核心結論:跨機器叢集必須解決 Session 共享,Redis 方案最穩健;Sticky Session 只作過渡或輔助。