Tomcat http转https

在使用阿里云的SLB时发现将https映身上http时,当使用response.sendRedirect进行转身时会跳成http请求。这是因为tomcat把请求来源当成了http.

使用以下方法来解决这个问题:

1. 在SLB的基本配置的高级配置中开启SLB监听协议。

2. 修改tomcat配置文件
2.1 设定TOMCAT的使用前端代理模式,解决TOMCAT中程序的redirect没有跳转到SSL的问题。
<Connector port="8080"
[color=red]proxyName="这里是域名"
proxyPort="443"
scheme="https"
secure="true" [/color]
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000" URIEncoding="UTF-8" useBodyEncodingForURI="true"
redirectPort="8443" />
上述的含义是,
SLB的域名是proxyName
SLB对外端口是proxyPort
SLB使用的协议是https
SLB是否开启SSL:secure

2.2 设定X-Forwarded过滤器
在server.xml中的<Engine>元素下增加如下内容:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
internalProxies="47\.74\.\d{1,3}\.\d{1,3}"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https"/>

internalProxies的意思是:TOMCAT仅接受这个IP段过来的请求中的X-Forwarded系列的值覆写为Remote_Addr等。加了这个过滤器之后使用request.getRemoteAddr()就可以获取到正确的客户端IP了。需要注意的是,这个IP段需要根据你所用的SLB来写。

在TOMCAT里,internalProxies的默认值为(无法覆盖到SLB的IP段):
10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3}|127\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.1[6-9]{1}\.\d{1,3}\.\d{1,3}|172\.2[0-9]{1}\.\d{1,3}\.\d{1,3}|172\.3[0-1]{1}\.\d{1,3}\.\d{1,3}
特别注意:
这个<Value>一定要写在<Engine>元素下!
这个<Value>一定要写在<Engine>元素下!
这个<Value>一定要写在<Engine>元素下!
不要跟在<Host>里面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值