Назад | Перейти на главную страницу

stickysession не работает нормально в apache и двух экземплярах Glassfish

У меня есть два приложения, которые работают в двух экземплярах 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 как Веб-модуль по умолчанию, это работает нормально, и контекст тот же, и сервер создает новый файл cookie, например:

Но когда я пытаюсь подключиться к НЕТ Веб-модуль по умолчанию, он использует два экземпляра.

Не могли бы вы предложить правильную конфигурацию 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
+-------+----------------------------------------+-----+    

После недели поисков я наконец нашел решение:

Я использую две вещи, одну в двух приложениях и одну на сервере Apache:

Итак, в приложениях мы должны определить имя файла cookie в web.xml:

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

Я не знаю, есть ли другие решения лучше, чем это, если да, я буду рад их узнать.