server 10.120.36.97:8010 srun_id=qa19-8010;
jvm_route $cookie_NTESSTUDYSI reverse;
keepalive 100;
}
该配置文件中配置了一个Nginx连接两个Tomcat,当请求过来时,会依据SessionID中的后缀来查找请求发送到哪个Tomcat,例如NTESSTUDYSI=1816E5ECBC052F6ABA420FEE7B06DA86.qa18-8010;就会把带这个SessionID的请求发送到 10.120.36.68(qa18)这台机器上去。
在qa18这台机器的Tomcat配置文件server.xml中,会设置jvmRoute="qa18-8010",这样保证生成的SessionID的后缀是qa18-8010,如果这个两个后缀不一致的话,同样会出现问题。
例如如果Nginx配置文件中upstream.conf中设置的srun_id=qa18-8010,而tomcat配置文件中设置的jvmRoute="qatest18-8010",那么获取Cookie得到的SessionID后缀则为qatest18-8010,当发送请求到Nginx时,检测到SessionID的后缀和设置的server服务器无法匹配,则会丢失session,使得发送到Tomcat的动态请求依旧是没有Session信息的请求,造成session丢失,测试过程中还会有session不断的创建。
参考文档:
1. http://www.chinahtml.com/1007/128010707619425.html Cookie 和 Session区别
2. http://lgcpeter.iteye.com/blog/187893 Session过期时间设置
3. http://java.chinaitlab.com/base/802833.html 大话Session
4. http://www.360doc.com/content/12/0619/10/1073512_219153481.shtml JVM_Route
原文转自:http://qa.blog.163.com/blog/static/19014700220132554652728/