Apache-2.2

stickysession 在 apache 和兩個 Glassfish 實例中不能正常工作

  • January 23, 2017

我有兩個在兩個 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

但是當我嘗試連接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

<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

我不知道是否有比這更好的解決方案,如果是的話,我會很高興認識他們。

引用自:https://serverfault.com/questions/827935