分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

SSL 认证之后,request.getScheme()获取不到https的问题记录

发布时间:2023-09-06 02:20责任编辑:沈小雨关键词:http
通过浏览器输入https://www.xxx.com,request.getScheme()获取到的确实http而不是https通过request.getRequestURL()拿到的也是http://www.xxx.com分析原因,是因为用nginx+tomcat部署web服务,tomcat接受到的请求都是来自于nginx的http请求。
 ???????request.getScheme() ?//总是 http,而不是实际的http或https ?????????request.isSecure() ?//总是false(因为总是http) ?????????request.getRemoteAddr() ?//总是 nginx 请求的 IP,而不是用户的IP ?????????request.getRequestURL() ?//总是 nginx 请求的URL 而不是用户实际请求的 URL ?????????response.sendRedirect( 相对url ) ?//总是重定向到 http 上 (因为认为当前是 http 请求) ?
解决办法:
  1、在nginx 配置location处加上proxy_set_header X-Forwarded-Scheme ?$scheme;     通过request.getHeader("X-Forwarded-Scheme")获取真实的scheme
  2、在Tomcat server.xml中添加
<Engine name="Catalina" defaultHost="localhost"> ?
  这行之后 ?????<Valve className="org.apache.catalina.valves.RemoteIpValve" ?????????remoteIpHeader="X-Forwarded-For" ?????????protocolHeader="X-Forwarded-Proto" ?????????protocolHeaderHttpsValue="https"/> ?

   3、如果jsp中大量使用 request.getScheme() 获取,避免更改代码

    则需要配置 tomcat

 <Connector port="443" maxHttpHeaderSize="8192" ????????????????maxThreads="150" ????????????????enableLookups="false" disableUploadTimeout="true" ????????????????acceptCount="100" scheme="https" secure="true" ????????????????SSLEnabled="true" ????????????????SSLCertificateFile="${catalina.base}/conf/localhost.crt" ????????????????SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />
  
  如果nginx添加了ssl认证,tomcat不添加,则只需要配置蓝色部分就好
  红色部分,如果tomcat 需要添加ssl认证,则配置红色部分

SSL 认证之后,request.getScheme()获取不到https的问题记录

原文地址:https://www.cnblogs.com/xy51/p/9870107.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved