2013-04-02 43 views
1

我有一些tomcat7與memcached會話管理器,使用nginx代理tomcats,沒關係。nginx和tomcat(與memcached會話管理器)config context cookies =「false」

但是現在,我們需要在iphone safari上付費,並通過jsessionid訪問url。 因此,添加cookie =「false」到tomcat上下文。 然後我們將失去會話非常訪問(與url中jsessionid)。 但是,當使用nginx的和一個Tomcat服務器,或直接訪問Tomcat服務器,每一件事情是好的。

爲什麼happend? 有沒有人可以解決這個問題。 謝謝

+0

你是否還用tomcat測試過,沒有nginx,你在這種情況下是否也會遇到相同的問題?你的memcached會話管理器配置是什麼,你使用粘性或非粘性會話嗎? – MartinGrotzke

+0

我只用過tomcat測試過,它工作正常。 memcached會話管理器配置,使用非粘性會話。 –

+0

好吧,所以只有tomcat它的工作原理,但由Nginx代理它不起作用?你是否看到任何觸及tomcat的請求的不同,例如在日誌中?然後 – MartinGrotzke

回答

0

非常感謝Martin Grotzke。 Tomcat日誌很好。 我在msm的日誌中發現了一些東西。

Nginx的只是代理只有一個tomcat的與餅乾的配置=「假」,
第一個請求,男男性接觸者沒有備份會話到memcached中,
與url中的jsessionid下一個請求,找到tomcat的會議,MSM現在備份會話。

如果nginx的代理2雄貓與餅乾的配置=「假」,
第一個請求,nginx的代理TomcatA,登錄就可以了,響應的SessionID(TomcatA),但MSM 沒有備份成的memcached ,
下一個請求,nginx代理到TomcatB,sessionid(TomcatA)在url中,沒有會話在tomcat或memcached中,所以TomcatB創建一個新的會話,
第三個請求,nginx代理到TomcatA with sessionid(TomcatB的新會話) 。
因此,它始終保持和兩個tomcat的之間共享會話。

解決方法是在tomcat中刪除cookies =「false」的配置。

+0

問題是MSM不會話存儲在memcached中,我提出這是https://code.google.com/p/memcached-session-manager/issues/detail?id=161 – MartinGrotzke

+0

你能顯示出與網址JSESSIONID?該JSESSIONID必須在任何網址參數的前面,因此以http://本地主機:8081/foo置於=巴茲的作品,但HTTP://本地主機:?8081 /把富=巴茲; JSESSIONID = 123456-N2不起作用。隨着jsessionid正確放置在URL我不能重現問題... – MartinGrotzke