stickysession 在 apache 和两个 Glassfish 实例中无法正常工作

stickysession 在 apache 和两个 Glassfish 实例中无法正常工作

我有两个应用程序在两个 Glassfish 实例中运行,我将 apache 配置为sticky session如下方式使用:

ProxyPass / balancer://Appcluster/ stickysession=JSESSIONID

但这并非 100% 正确,当客户端从 App1 转到 App2 时,它会多次改变实例。

我检查了导航器中的 cookie,它显示了如下内容:

浏览器的 cookies

我发现了另一种配置web.xml,如下所示:

<session-config>
    <session-timeout>
        30
    </session-timeout>
    <cookie-config>
        <path>/</path>
    </cookie-config>
</session-config>

因此,当我像这样创建这条路径时,一切都正常,但它会创建一个新背景这两个应用程序之间的每次导航。

现在我配置我的 Glassfish 并将 App1 设置为默认 Web 模块,这工作正常,上下文相同,并且服务器创建一个新的 cookie,如下所示:

浏览器的 cookies

但当我尝试连接没有默认 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

我不知道是否还有比这更好的解决方案,如果有的话我会很高兴知道。

相关内容