在实际工作中,经常会用到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$1 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