今天新项目上线,碰到一个问题,公司用f5转发,使用的世https协议,但是在我们项目里request.getScheme()获取到的却是http,运维说是我们代码问题....,我查看我们项目的tomcat的serve.xml,发现没有证书,我想问一下精通这方面问题的小伙伴们,tomcat里没有证书,能用https协议吗?有碰到过这个问题的吗?怎么解决的?
阿神2017-05-27 17:43:49
https通常是由反向代理(如F5)来完成的(即SSL证书是配在反向代理上的),而Tomcat本身用的是http协议。
由于反向代理用了7层转发,request.getRemoteAddr()
不可能得到用户真实IP地址,所以通常在反向代理那边配X-Forwarded-For
,Tomcat这边用request.getHeader("X-Forwarded-For")
拿到用户真实IP地址)。同样道理,request.getScheme()
也不可能得到用户真实的协议,通常会在反向代理那边配X-Forwarded-Proto
这种Header,Tomcat这边用request.getHeader("X-Forwarded-Proto")
来判断用户是否处于https状态。