Nginx 代理后面的 Tomcat 为每个请求提供新的 jsessionid

Nginx 代理后面的 Tomcat 为每个请求提供新的 jsessionid

我有一个基于 ReactJS 的 Web 应用程序,由 / 上的 nginx 提供服务。此 Web 应用程序联系在 Tomcat 上运行的 Web 服务,该服务在同一台机器上的端口 8443 上运行。我在 nginx 上设置了一个 proxy_pass,以将 /APIServer 上收到的任何请求传递到 Tomcat 服务器。

代理传递成功将 /APIServer 上的请求发送到 Tomcat 服务器。但问题是 TomcatJSESSIONID为来自 Web 应用程序的每个请求提供了一个新值。Tomcat 的每个响应都有一个Set-Cookie带有新值的标头,而客户端在第一个请求之后的每个请求JSESSIONID都没有发送标头。Cookie

我的 nginx 配置如下:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html/analytics-ui;

    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /APIServer/ {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header Access-Control-Allow-Origin *;
        proxy_redirect off;
        proxy_pass https://127.0.0.1:8443/;
    }
}

在研究了如何解决此问题后,我添加了代理标头,但到目前为止,所有解决方案均无效。 Tomcat 仍为JSESSIONID来自 Web 应用程序的每个请求提供新的 s。这会导致 Web 应用程序在登录和授权等功能方面出现问题。

如果我使用 Postman 或 Web 浏览器直接调用 Tomcat 服务器上的 API,它就可以正常工作。

我是否忽略了什么,或者是否需要任何额外的配置才能使其正常工作?

谢谢。

答案1

好吧,我是笨手笨脚。

之所以不起作用,是因为我没有在 nginx 上使用 SSL,而 Tomcat 使用的是 SSL。我在 nginx 中设置了 SSL,现在它可以按预期工作。

相关内容