会话在 tomcat 中丢失,使用 nginx 作为代理

Ces*_*sar 4 tomcat nginx reverse-proxy apache-2.2

我在 tomcar 服务器中有几个应用程序。我使用 nginx 作为代理,所以我可以实现从子域加入应用程序

tomat:8080/app1 > app1.mydomain.com 
tomat:8080/app2 > app2.mydomain.com 
Run Code Online (Sandbox Code Playgroud)

我设置了一个反向代理:

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/;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

任何提示?

谢谢。

小智 10

我注意到当代理位置路径与 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/;
}
Run Code Online (Sandbox Code Playgroud)