Nginx
nginx 代理後面的 Tomcat 為每個請求提供了新的 jsessionid
我有一個基於 ReactJS 的 Web 應用程序,由 / 上的 nginx 提供服務。此 Web 應用程序聯繫執行在 Tomcat 上的 Web 服務,該服務在同一台機器上的埠 8443 上執行。我已經在 nginx 上設置了一個 proxy_pass 以將 /APIServer 上收到的任何請求傳遞給 Tomcat 伺服器。
代理通道成功地將 /APIServer 上的請求發送到 Tomcat 伺服器。但問題是 Tomcat 為
JSESSIONID
來自 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 應用程序的每個請求提供 new 。這會導致 Web 應用程序出現登錄和授權等功能問題。如果我使用 Postman 或 Web 瀏覽器直接呼叫 Tomcat 伺服器上的 API,它就可以工作。
有什麼我忽略的東西,還是需要任何額外的配置才能讓它工作?
謝謝。
好吧,我是個笨蛋。
這不起作用的原因是因為我沒有在 nginx 上使用 SSL,而 Tomcat 使用 SSL。我在 nginx 中設置了 SSL,現在它按預期工作。