使用 nginx 作为 tomcat 的反向代理会导致每个 ssl 请求产生新的 jsessionid

使用 nginx 作为 tomcat 的反向代理会导致每个 ssl 请求产生新的 jsessionid

我正在使用 nginx 作为 tomcat 设置的反向代理,并且大多数部分都运行良好,我遇到的唯一问题是每个对 http 地址的请求都会导致创建一个新的 JSESSION ID(这在 http 中不会发生),这里是 NGINX 配置的相关部分:

location / {

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-Proto https;
            proxy_redirect off;
            proxy_connect_timeout      240;
            proxy_send_timeout         240;
            proxy_read_timeout         240;
            proxy_pass http://localhost:8080;
      }

知道为什么我不断生成新的 jsessionid 吗?

答案1

将以下代码片段添加到您的配置文件并重试:

if ($http_cookie ~* "jsessionid=([^;]+)(?:;|$)") {
    set $co "jsessionid=$1";
}
proxy_set_header Cookie "$co";

答案2

在我的环境中,这种行为是由 Tomcat 引起的,或者由于代理时更改根导致 servlet 需要不同的 cookie 路径:

通过设置路径proxy_cookie_path幫助:

location / {
    proxy_pass http://localhost:8080/webapp/;
    proxy_cookie_path /webapp/;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

相关内容