一、问题场景

这个问题只会出现在云服务器操作系统使用Windows Server 2012的场景,如果使用的是Windows Server 2008 R2则不存在这个问题。

二、https部署场景

1. 阿里云SLB的配置:

要让SLB支持https,需要使用4层负载均衡,也就是添加TCP协议,并添加443端口。

2. Windows Server 2012云服务器中IIS的相应配置:

参考博文:给IIS添加CA证书以支持https

三、遇到的问题

以https通过SLB的VIP无法访问目标站点,而通过云服务器的公网IP可以正常访问,在其他云服务器中通过内网IP也可以正常访问。

telnet可以正常连接SLB的443端口。

四、问题的排查过程

我们向阿里云提交工单之后,阿里云技术工程师在云服务器所在的宿主机上进行了抓包测试,发现云服务器收包之后,没有回包。

我们查看IIS日志,发现日志中没有https请求的踪迹,阿里云技术工程师说这是由于TCP三次握手没完成。

图片来自:简单理解Socket

于是根据阿里云技术工程师的建议,我们在云服务器内部进行了抓包。

我们用的工具是Wireshark,抓包结果如下图:

抓包结果说明云服务器收到了来自SLB的https请求的SYN包,却没有回包。

于是问题就锁定在为什么没有回包?

我们怀疑是底层虚拟机化层面的问题,阿里云怀疑是云服务器内部Windows的问题。

五、问题的解决

阿里云技术工程师另外用Windows Server 2012部署了同样的场景,成功重现了问题,并给我们提供解决方法(解决方法链接),以下是关键步骤:

1. Install the Loopback Adapter

2. Make the Windows Networking Stack Use the Weak Host Model

netsh interface ipv4 set interface <IDX> weakhostreceive=enabled

3. Add the Loopback Adapter to your Site Bindings

但这个解决方案针对的是Windows Server 2003和2008,我们在Windows Server 2012上按照这三个步骤设置之后,问题并没有解决。但问题的原因就在这个地方,我们稍作摸索,就成功解决了问题。

下面是具体的设置步骤:

1. 安装Loopback Adapter(在Windows Server 2012中叫Microsoft KM-TEST Loopback Adapter)

  • 打开Device Manager(设置管理器)
  • Add legacy hardware
  • Install hardware that I manually select from a list(Advanced)
  • Network adapters
  • Microsoft -> Microsoft KM-TEST Loopback Adapter

2. 启用Weak Host Model

  • 在命令行下运行netsh interface ipv4 show interface,得到所有网络接口的Idx
  • 为所有网络接口分别设置weakhostsend=enabled, weakhostsend=enabled
netsh interface ipv4 set interface  weakhostsend=enabled
netsh interface ipv4 set interface weakhostreceive=enabled netsh interface ipv4 set interface weakhostsend=enabled
netsh interface ipv4 set interface weakhostreceive=enabled netsh interface ipv4 set interface weakhostsend=enabled
netsh interface ipv4 set interface weakhostreceive=enabled netsh interface ipv4 set interface weakhostsend=enabled
netsh interface ipv4 set interface weakhostreceive=enabled

3. 在IIS中添加额外的针对Loopback Adapter的https绑定

上图中的169.254.164.223就是添加的Microsoft KM-TEST Loopback Adapter网络接口自动分配的IP地址。

完成这些配置之后,问题就解决了!

六、参考资料

七、相关链接

云计算之路-阿里云上:在SLB上部署https遇到的问题及解决方法的更多相关文章

  1. 云计算之路-阿里云上:SLB会话保持的一个坑

    冒着被大家厌烦的风险,今天再发一篇“云计算之路-阿里云上”.这是在前一篇发过之后真实发生的事情,我们觉得定位问题的过程值得分享.而且估计园子里不少朋友被这个问题骚扰过,我们有责任让大家知道问题的真正原 ...

  2. 云计算之路-阿里云上:SLB引起的https访问速度慢问题

    自从我们在阿里云SLB上部署了https之后(详见在SLB上部署https遇到的问题及解决方法),陆续有园友向我们反馈登录时速度很慢(登录时是通过https访问),有些园友甚至无法访问登录页面. 而我 ...

  3. 云计算之路-阿里云上:禁用Windows虚拟内存引发的重启

    昨天(2013年8月6日)下午,承载www.cnblogs.com主站的两台云服务器分别自动重启了1次,由于这两台云服务器使用了负载均衡(SLB),重启并未影响网站的正常访问. 与这次重启相关的Win ...

  4. 云计算之路-阿里云上:愚人节被阿里云OCS愚

    今天是愚人节,而我们却被阿里云OCS愚,很多地方的缓存一直不过期,造成很多页面中的数据一直不更新.这篇博文将向您分享我们这两天遇到的OCS问题. 阿里云OCS(Open Cache Service)是 ...

  5. 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析

    在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...

  6. 云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题

    今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧. 而且3台服务器特地使用了不同的配置:1台是禁用了虚拟内存 ...

  7. 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障

    3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...

  8. 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况

    在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...

  9. 云计算之路-阿里云上:启用Windows虚拟内存引发的CPU 100%故障

    今天上午11:35~11:40左右,由于负载均衡中的两台云服务器CPU占用突然飚至100%,造成网站5分钟左右不能正常访问,请大家带来了麻烦,请谅解! (上图中红色曲线表示CPU占用) 经过分析,我们 ...

  10. 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时

    在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...

随机推荐

  1. hibernate笔记3--hql查询

    1.Query:他是一种比较面向对象的查询方式,query查询也叫做hql查询(hibernate query language),使用query查询,需要接受一个         hql语句进行查询 ...

  2. Angular ui-route介绍

    参考博客: https://www.cnblogs.com/haogj/p/4885928.html 原文地址:http://www.ng-newsletter.com/posts/angular-u ...

  3. python基础-字符串操作

    输出高亮 语法:   显示方式.前景色.背景色至少一个存在即可. 显示方式:0(关闭所有效果),1(高亮),4(下划线),5(闪烁),7(反色),8(不可见). 前景色以3开头,背景色以4开头,具体颜 ...

  4. 人工智能背景下的 Office 365 现状和发展趋势

    谈论人工智能是让人兴奋的,因为它具有让人兴奋的两大特征 —— 每个人都似乎知道一点并且以知道一点为荣,但又好像没多少人能真正讲的明白.毫无疑问,我也仅仅是知道一点点,这一篇文章试图想通过比较接地气的方 ...

  5. 企业常用的站内收索、QQ群、在线客服

    <div class="toplinks">            <form target="_blank">             ...

  6. cms-静态化组件

    1.要让我们的网站性能更好,那么有的东西是需要做静态化的.做静态化步骤: 1.1在web.xml中配置监听器 1.2.创建一个bean用来实现静态化 web.xml <?xml version= ...

  7. LeetCode Implement strStr() 实现strstr()

    如题 思路:暴力就行了.1ms的暴力!!!别的牛人写出来的,我学而抄之~ int strStr(char* haystack, char* needle) { ; ; ; ++i) { ; ; ++j ...

  8. DDL与DML语句

    1. DDL语句 SQL语句:结构化查询语句,使用SQL与数据库“沟通”,完成相应的数据库操作. l DDL:数据定义语言,用来维护数据库对象 1.1 创建表 Ø CREATE:创建表 演示:创建员工 ...

  9. Hbase各种查询总结

    运用hbase好长时间了,今天利用闲暇时间把Hbase的各种查询总结下,以后有时间把协处理器和自定义File总结下. 查询条件分为: 1.统计表数据 2,hbase 简单分页 3,like 查询 4  ...

  10. 基于CXF开发crm服务

    1 基于CXF开发crm服务 1.1 数据库环境搭建 1.2 web项目环境搭建 第一步:创建动态web项目 第二步:导入CXF相关jar包 第三步:配置web.xml <context-par ...