开发者社区> 孙伟sw> 正文

解决alitomcat中无法获得https协议的问题

简介: ###事件: 客户反馈,为什么配置https请求,使用request.getScheme()、request.getServerPort(),后台获取访问协议和端口的时候还是获取的http和80。。 ###用户架构: CDN+SLB+EDAS应用 其中 CDN使用443端口回源 SLB配置安全证书使用HTTPS公网IP访问 EDAS使用Alitomcat,server.xml配置
+关注继续查看

事件:

客户反馈,为什么配置https请求,使用request.getScheme()、request.getServerPort(),后台获取访问协议和端口的时候还是获取的http和80。。

用户架构: CDN+SLB+EDAS应用

其中
CDN使用443端口回源
SLB配置安全证书使用HTTPS公网IP访问
EDAS使用Alitomcat,server.xml配置

< Valve className="org.apache.catalina.valves.RemoteIpValve"
      remoteIpHeader="x-forwarded-for"
      remoteIpProxiesHeader="x-forwarded-by"
      protocolHeader="x-forwarded-proto"/>

通过用户沟通已经需求已经比较清晰。
用户希望在后端ECS处,可以拿到客户端真实请求的来源IP(x-forwarded-for)和协议(X-Forwarded-Proto),但目前情况是在自建服务器的tomcat上使用正常,换成阿里服务器后有问题,获得的仍然是http和80。

排查过程:

  1. 首先用分离的方式将CDN去除。可将域名解析改为SLB公网IP
  2. 判断SLB是否转发正常。SLB的机制,是将公网入口请求转化为内网请求传给ECS,公网入口走https,内网出口走http,X-Forwarded-Proto属性在SLB中需要单独开启“SLB监听协议”属性,通过X-Forwarded-Proto头字段获取SLB的监听协议进行转发给后端。
  3. 开启该协议后,验证ECS是否收到了对应的属性。可通过在ECS上抓包的方式来识别。
    通过tcpdump抓包,看到在访问SLB的https协议时,X-Forwarded-Proto确实为https

图片.png

  1. 那么为什么alitomcat上没有得到对应的https值呢。通过上网查询。由于internalProxies匹配的内网IP不包含SLB的100段的IP,需要配置internalProxies="100.d{1,3}.d{1,3}.d{1,3}"来识别转发IP。

如果没有配置,则默认IP地址为

Regular expression (using java.util.regex) that a proxy's IP address must match to be considered an internal proxy. Internal proxies that appear in the remoteIpHeader will be trusted and will not appear in the proxiesHeader value. If not specified the default value of 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} will be used.

详细内容可以访问
http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html

重启应用后,用SLB访问Https测试可得:
图片.png
验证生效,结果正确。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SOFAMesh中的多协议通用解决方案x-protocol介绍系列(3)——TCP协议扩展
在 SOFAMesh 的开发过程中,针对遇到的实际问题,我们给出了一套名为 x-protocol 的解决方案,本文将会对这个解决方案进行详细的讲解,本篇为最后一篇。
558 0
解决ajax跨域问题的一种方法
解决ajax跨域问题的一种方法 前后端分离经常用json来传输数据,比较常见的问题就有ajax跨域请求的错误问题,这里是我的一种解决方法: 在java中加入如下的注解类: import org.
788 0
我的mqtt协议和emqttd开源项目个人理解(26) - 产品开发遇到的问题解答,关于订阅和上下线插件
我的mqtt协议和emqttd开源项目个人理解(26) - 产品开发遇到的问题解答,关于订阅和上下线插件
158 0
解决Tomcat端口占用的问题
在dos命令中输入以下命令查询正在被使用的端口号以及使用它的程序。 命令:netstat -ano 内容分析: 前面的程序占用的进程,冒号后面的就是我们要查找的端口。
498 0
深入浅出https协议(ssl/tls)
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html ios底层是openssl支持的,android的应该也一样; mac下使用openssl命令查看到的tls加密算法支持类型: DHE-RSA...
840 0
has been modified since the precompiled header问题的几种解决方案
有时候不小心就报了这个错误,在以下步骤中,只有没解决问题的情况下,才继续往下操作: Clean工程 按住option键,再次Clean(Clean Build Folder.
713 0
The APR based Apache Tomcat Native library which allows optimal performance in production 问题的解决
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:XXXX 出现原因分析: Tomcat建议使用apache的apr,来更好的运
1263 0
SOFAMesh中的多协议通用解决方案x-protocol介绍系列(1) : DNS通用寻址方案
x-protocol 的定位是云原生、高性能、低侵入性的通用 Service Mesh 落地方案,依托 Kubernetes 基座,利用其原生的服务注册和服务发现机制,支持各种私有 RPC 协议低成本、易扩展的接入,快速享受 Service Mesh 所带来的红利。
782 0
+关注
孙伟sw
热爱云计算的小锅一枚。
9
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载