我有一个基于 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,现在它可以按预期工作。