Sessão perdida no tomcat uing nginx como proxy

2

Eu tenho vários aplicativos em um servidor tomcar. Eu estou usando nginx para proxy para que eu possa alcançar o aplicativo de um subdomínio

tomat:8080/app1 > app1.mydomain.com 
tomat:8080/app2 > app2.mydomain.com 

Eu configurei um proxy reverso:

server {
  listen 80;
  server_name  app1.mydomain.com;
  location / {
   proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Host $host;
     proxy_set_header X-Forwarded-Server $host;

    proxy_pass http://tomcat:8080/app1/;
  }
}

Eu consigo acessar o aplicativo sem problemas. Mas é incapaz de manter a sessão. Eu tenho outra aplicação no jetty que roda sem problemas atrás do ngix. Além disso, se eu acces a aplicação diretamente, posso operá-la sem problemas.

Alguma dica?

Obrigado.

    
por Cesar 10.08.2014 / 00:14

4 respostas

5

Percebi que o problema ocorre quando o caminho do local do Proxy não corresponde ao nome do contexto do aplicativo Tomcat e há uma incompatibilidade do caminho do cookie que causa um novo JSESSIONID para cada solicitação.

Tente adicionar a diretiva proxy_cookie_path, conforme mencionado abaixo:

location / {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;

    proxy_cookie_path ~*^/.* /;

    proxy_pass http://tomcat:8080/app1/;
}
    
por 18.06.2015 / 16:46
0

Você pode ativar a afinidade da sessão ou da sessão fixa. Isso garantirá que as solicitações do mesmo cliente sejam passadas para o mesmo tomcat toda vez

Alterar no nginx:

sticky cookie srv_id expira = 1h domínio = .example.com caminho = /;

link

    
por 11.08.2014 / 09:36
0

Para mim, a resposta fornecida por Diwakar Timilsina foi a resposta exata que resolveu meu problema.

Tendo o nginx respondendo ao contexto raiz do VHost e intermediando os pedidos para uma instância do Tomcat em um contexto / aplicativo

Por exemplo:

http://hunt.pepe.com/index.jsp  -->  http://localhost:8080/hunt-app

A única diretiva que eu adicionei foi [ proxy_cookie_path ~ ^ /. /; ]:

location / {
    ·
    ·
    proxy_cookie_path ~*^/.* /;
    ·
    proxy_pass  http://localhost:8080/hunt-app;
}

Muito obrigado cara, você literalmente salvou minha bunda.

    
por 21.04.2017 / 17:38
-2

Estou também enfrentando o mesmo problema que não consegue manter a sessão. Cesar mencionou que ele resolveu o problema com o apache, mas estou recebendo o mesmo, mesmo com o apache. Alguém pode me ajudar? Eu fiz a seguinte configuração.

Configuração do DNS

subdominio.meudominio.com.br 10.10.10.10

Configuração de proxy no apache em 10.10.10.10

<VirtualHost *:80>
ServerName subdomain.mydomain.com

ProxyPass / http://tomcatserverIP:8080/appname
ReverseProxyPass / http://tomcatserverIP:8080/appname

</VirtualHost>
    
por 28.08.2014 / 09:34