問題原因
??服務器運行在 HTTPS 模式,但代碼卻發出了 HTTP 重定向指令,兩套協議對不上,瀏覽器直接報錯。??
在Java中,常見于response.sendRedirect()
方法的使用。該方法默認生成基于HTTP的絕對URL,即便原始請求是通過HTTPS發起的。Nginx作為反向代理時,若未正確處理協議轉換,會將這種重定向直接傳遞給客戶端。
最優解決方案
Nginx配置層面可通過以下方式強制協議一致性:
proxy_redirect http:// $scheme://;
該指令會將上游服務器返回的HTTP重定向自動轉換為當前請求使用的協議($scheme
變量動態匹配HTTP/HTTPS)。需確保該配置出現在server
或location
塊中。
location / {proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host:$server_port;proxy_pass http://127.0.0.1:8080/;#修復重定向協議proxy_redirect http:// $scheme://;}