2013-04-02 39 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