У меня есть два приложения, которые работают в двух экземплярах 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
Я не знаю, есть ли другие решения лучше, чем это, если да, я буду рад их узнать.