nginx+tomcat部署web服务,http转https

通过nginx+tomcat部署web服务,如果在nginx处配置https,则在tomcat上通过下面方法获取的仍然都是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 请求)
 如果网站请求是https,而里面的资源是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认证,则配置红色部分
    4、在jsp头部添加
    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
    这会将http都转成https

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值