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/