stickysession não funciona bem em apache e duas instâncias Glassfish

1

Eu tenho dois aplicativos que são executados em duas Instâncias Glassfish, eu configuro meu apache para usar sticky session da seguinte forma:

ProxyPass / balancer://Appcluster/ stickysession=JSESSIONID

Mas isso não funciona 100% correto, ele altera algumas vezes a instância quando o cliente passa de App1 para App2.

Eu verifico os cookies no meu navegador e mostra-me algo assim:

Euencontreioutraconfiguraçãoemweb.xml,assim:

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

Então,quandoeufaçoessecaminhocomoesse,tudofuncionabem,mascriaumnovocontextoacadanavegaçãoentreessesdoisaplicativos.

AgoraeuconfiguromeuGlassfishedefinooApp1comoumMódulodaWebpadrão,essetrabalhofuncionabemeocontextoéomesmo,eoservidorcriaumnovocookiecomoeste:

Mas quando tento me conectar ao SEM Módulo da Web padrão , ele usa duas instâncias.

Você pode propor a configuração correta do Apache e do Glassfish para executar vários aplicativos em um ambiente de cluster?

EDITAR

Eu notifiquei alguma coisa, então quando o cliente vai de App1 para App2 e o VS, toda vez que ele cria um novo cookie como este:

+-------+----------------------------------------+
| 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
+-------+----------------------------------------+-----+    
  • Por que isso cria um novo cookie todas as vezes?
  • Como corrigir e torná-lo exclusivo por aplicativo?
por YCF_L 23.01.2017 / 08:34

1 resposta

0

Após uma semana de pesquisa, finalmente encontrei a solução:

Eu uso duas coisas, uma nas duas aplicações e uma no servidor Apache:

Portanto, nos aplicativos, devemos definir o nome do cookie em 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> 

E no servidor Apache, corrigimos o nome stickysession em /etc/httpd/conf/httpd_proxy.conf :

ProxyPass / balancer://Appcluster/ stickysession=jsessionapp1|jsessionapp2|jsessionappN

Não sei se há outras soluções melhores do que isso, se sim, ficarei feliz em conhecê-las.

    
por 23.01.2017 / 15:37