我有两个应用程序在两个 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,如下所示:
但当我尝试连接没有默认 Web 模块,它使用两个实例。
您能否建议正确的 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?
- 如何修复并使其在每个应用程序中独一无二?
答案1
经过一周的搜索,我终于找到了解决方案:
我使用了两样东西,一个在两个应用程序中,一个在服务器 Apache 中:
因此,在应用程序中,我们应该定义 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:
ProxyPass / balancer://Appcluster/ stickysession=jsessionapp1|jsessionapp2|jsessionappN
我不知道是否还有比这更好的解决方案,如果有的话我会很高兴知道。