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

Сессия потеряна в tomcat с использованием nginx в качестве прокси

У меня есть несколько приложений на сервере tomcar. Я использую nginx в качестве прокси, поэтому я могу получить доступ к приложению из поддомена

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

Настроил обратный прокси:

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/;
  }
}

Я могу получить доступ к приложению без проблем. Но он не может продолжить сеанс. У меня есть еще одно приложение на пристани, которое без проблем запускается за ngix. Также, если я обращаюсь к приложению напрямую, я могу работать с ним без проблем.

Намек?

Спасибо.

Я заметил, что проблема возникает, когда путь к прокси-серверу не совпадает с именем контекста приложения Tomcat и существует несоответствие пути cookie, которое вызывает новый JSESSIONID для каждого запроса.

Попробуйте добавить директиву proxy_cookie_path, как указано ниже:

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/;
}

Для меня ответ предоставлен Дивакар Тимилсина был тем, который решил мою проблему ..

Наличие nginx, отвечающего на корневой контекст VHost, и проксирования запросов к экземпляру Tomcat в контексте / приложении.

Например:

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

Единственная директива, которую я добавил, была [ proxy_cookie_path ~^ /. /; ]:

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

Большое спасибо, чувак, ты буквально спас мне задницу.

Вы можете включить привязку сеанса или привязку сеанса. Это гарантирует, что запросы от одного и того же клиента будут передаваться одному и тому же коту каждый раз.

Изменение в nginx:

липкий cookie srv_id expires = 1h domain = .example.com path = /;

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#sticky

Я также сталкиваюсь с той же проблемой, что не может продолжить сеанс. Сезар упомянул, что он решил проблему с apache, но я получаю то же самое даже с apache. Может кто-нибудь мне помочь. Я сделал следующую настройку.

Конфигурация DNS

subdomain.mydomain.com 10.10.10.10

Конфигурация прокси в apache на 10.10.10.10

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

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

</VirtualHost>