我有两个应用程序在两个Glassfish实例中运行,我configuration我的Apache使用sticky session
如下所示:
ProxyPass / balancer://Appcluster/ stickysession=JSESSIONID
但是这并不是100%正确的,当客户端从App1转到App2时,它会改变一些实例。
我检查我的导航器中的cookies显示我这样的事情:
我在web.xml
发现了另一个configuration,如下所示:
<session-config> <session-timeout> 30 </session-timeout> <cookie-config> <path>/</path> </cookie-config> </session-config>
所以当我这样做这样的path,每件事情都很好,但它创造了一个新的上下文之间的每个导航这两个应用程序之间。
现在我configuration我的GlassFish并设置App1像一个默认的Web模块 ,这工作正常,上下文是一样的,服务器创build一个新的cookie像这样:
但是,当我尝试连接没有默认的Web模块 ,它使用两个实例。
你能否提出Apache和Glassfish的正确configuration以在集群环境中运行多个应用程序?
编辑
我通知了一些事情,所以当客户端从App1到App2和VS,每次创build一个新的cookie如下:
+-------+----------------------------------------+ | APP | Cookie | +-------+----------------------------------------+-----+ | app1 | b5a1cd4befdc306f6e569d835b5e.instance2 | New | +-------+----------------------------------------+-----+ | app2 | b6caf890638a506216d625f7c82b.instance2 | New | +-------+----------------------------------------+-----+ | app1 | b6d1870ad8f3d044cc768b31e810.instance2 | New | +-------+----------------------------------------+-----+ | app2 | b6d84bf7b2a6fc37e3c9ffaf701b.instance2 | New | +-------+----------------------------------------+-----+ | app2 | b6d84bf7b2a6fc37e3c9ffaf701b.instance2 |Same | because i don't change the application +-------+----------------------------------------+-----+
经过一个星期的search,终于find了解决办法:
我使用两个东西,一个在两个应用程序中,一个在服务器Apache中:
因此,在应用程序中,我们应该在web.xml中定义cookie的名称:
APP1
<session-config> <session-timeout> 30 </session-timeout> <cookie-config> <name>jsessionapp1</name> <path>/</path> </cookie-config> </session-config>
APP2
<session-config> <session-timeout> 30 </session-timeout> <cookie-config> <name>jsessionapp2</name> <path>/</path> </cookie-config> </session-config>
而在服务器Apache中,我们在/etc/httpd/conf/httpd_proxy.conf中修复了stickysession的名字:
ProxyPass / balancer://Appcluster/ stickysession=jsessionapp1|jsessionapp2|jsessionappN
我不知道是否有其他的解决scheme比这更好,如果是的话,我会很高兴认识他们。