https经过ngxin在web服务器收到http请求
Posted charon2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了https经过ngxin在web服务器收到http请求相关的知识,希望对你有一定的参考价值。
一. 问题描述:
nginx代理nexus的时候页面不全,部分https地址自动转成http了,使用方案四解决的
浏览器输入https://www.mysite.com,后台通过request.getScheme()获取到的确实http而不是https,通过request.getRequestURL()拿到的也是http://www.mysite.com
分析原因:因为nginx+tomcat部署web服务,tomcat接受到的请求都是来自于nginx的http请求。浏览器请求https是外网域名或者ip,在浏览器发出请求时经过nginx代理拦截会进行证书验证,验证通过后nginx把外网请求转发到内网服务器,一般都是http请求,因为https证书只针对外网ip,内网服务无法配置ssl证书,而且如果转发到web服务器也是https请求,那么每个web服务都需要配置ssl证书。
二. 解决办法:
方案一:修改服务端,支持https请求,nginx的配置改为proxy_pass https://xrk_biz_web2_8013;
方案二:在nginx端强制重定向http到https。
方案三:修改服务端逻辑代码(配置文件中主机访问地址及redirect补全主机地址),保证相关回调链接都是https开头。
方案四:使用spring-boot官方提供的解决方案,nginx添加配置(最终采用):
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
以上是关于https经过ngxin在web服务器收到http请求的主要内容,如果未能解决你的问题,请参考以下文章