我正在使用 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;
}