我有两个在两个 Glassfish 实例中运行的应用程序,我将我的 apache 配置为sticky session
像这样使用:
ProxyPass / balancer://Appcluster/ stickysession=JSESSIONID
但这不是 100% 正确的,当客户端从 App1 转到 App2 时,它会更改一些实例。
我在导航器中检查了 cookie,它向我显示了如下内容:
我在中找到了另一个配置web.xml
,如下所示:
<session-config>
<session-timeout>
30
</session-timeout>
<cookie-config>
<path>/</path>
</cookie-config>
</session-config>
因此,当我像这样制作这条路径时,一切都可以正常工作,但是它会在这两个应用程序之间的每次导航时创建一个新的上下文。
现在我配置我的 Glassfish 并将 App1 设置为默认 Web 模块,这可以正常工作并且上下文是相同的,并且服务器会创建一个像这样的新 cookie:
但是当我尝试连接NO Default Web Module时,它使用了两个实例。
您能否提出正确的 Apache 和 Glassfish 配置以在集群环境中运行多个应用程序?
编辑
我通知了一些事情,所以当客户端从 App1 到 App2 和 VS 时,每次它都会创建一个这样的新 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
+-------+----------------------------------------+-----+
- 为什么每次都会创建一个新的cookie?
- 如何修复每个应用程序并使其独一无二?
经过一周的搜索,我终于找到了解决方案:
我使用了两件东西,一件在两个应用程序中,一件在服务器 Apache 中:
所以在应用程序中,我们应该在web.xml中定义 cookie 的名称:
APP1
APP2
在服务器 Apache 中,我们在/etc/httpd/conf/httpd_proxy.conf中修复了stickysession的名称:
我不知道是否有比这更好的解决方案,如果是的话,我会很高兴认识他们。