Session在tomcat中以nginx作为代理丢失

我有一个tomcar服务器上的几个应用程序。 我正在使用nginx的代理,所以我可以实现从子域的应用程序join

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

我build立了一个反向代理

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

我可以访问应用程序没有问题。 但是无法保持会话。 我在docker上有另一个应用程序,在ngix后面运行没有问题。 另外,如果我直接访问应用程序,我可以操作它没有问题。

任何提示?

谢谢。

我注意到当代理位置path与Tomcat应用程序上下文名称不匹配时会出现问题,并且存在导致每个请求的新JSESSIONID的Cookiepath不匹配。

尝试添加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/; } 

您可以启用粘滞会话或会话亲和力。 这将确保来自同一客户端的请求每次都传递给同一个tomcat

在nginx中改变:

粘性cookie srv_id expires = 1h domain = .example.com path = /;

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

对我来说, Diwakar Timilsina提供的答案是解决我的问题的确切答案。

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

多谢老兄,你真的救了我的屁股。

我也面临同样的问题,无法保持会议。 Cesar已经提到他已经用apache解决了这个问题,但是即使使用apache也是如此。 有人可以帮助我吗? 我做了以下设置。

DNSconfiguration

subdomain.mydomain.com 10.10.10.10

代理configuration在10.10.10.10的Apache

 <VirtualHost *:80> ServerName subdomain.mydomain.com ProxyPass / http://tomcatserverIP:8080/appname ReverseProxyPass / http://tomcatserverIP:8080/appname </VirtualHost>