温馨提示:这篇文章已超过470天没有更新,请注意相关的内容是否还可用!
摘要:在使用nginx进行反向代理后,Java应用程序中的request.getScheme()
方法可能无法正确获取到HTTPS协议。为解决这一问题,需要在nginx配置中确保正确设置HTTP到HTTPS的转发,并添加相关的代理头信息。在Java应用中,可以通过检查X-Forwarded-Proto
头来获取正确的协议信息。这样,即使经过反向代理,request.getScheme()
也能正确识别HTTPS。
在实际工作中,经常会用到nginx反向代理应用,访问https页面Java 通过request.getScheme()获取不到https协议,或者response.sendRedirect重定向是http,而不是我们想要的https。

(图片来源网络,侵删)
问题原因
经过反代后,协议信息没有转发到后端,或者后端没有设置 protocolHeader
nginx配置
需要在nginx的配置文件的server段加上 proxy_set_header X-Forwarded-Proto $scheme,

(图片来源网络,侵删)
nginx的server完整配置如下(仅做参考):
server { listen 80; listen 443 ssl; server_name www.aa.com; if ($scheme != "https") { rewrite ^(.*)$ https://$host permanent; } ssl_certificate /etc/letsencrypt/live/aa.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/aa.com/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE; ssl_prefer_server_ciphers on; add_he
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...