云计算之路-阿里云上:在SLB上部署https遇到的问题及解决方法
一、问题场景
这个问题只会出现在云服务器操作系统使用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地址。
完成这些配置之后,问题就解决了!
六、参考资料
- Barracuda Load Balancer - Deployment in a Microsoft Windows Server 2003 or 2008 Environment
- IIS 8 NLB LoopBack Issues
七、相关链接
云计算之路-阿里云上:在SLB上部署https遇到的问题及解决方法的更多相关文章
- 云计算之路-阿里云上:SLB会话保持的一个坑
冒着被大家厌烦的风险,今天再发一篇“云计算之路-阿里云上”.这是在前一篇发过之后真实发生的事情,我们觉得定位问题的过程值得分享.而且估计园子里不少朋友被这个问题骚扰过,我们有责任让大家知道问题的真正原 ...
- 云计算之路-阿里云上:SLB引起的https访问速度慢问题
自从我们在阿里云SLB上部署了https之后(详见在SLB上部署https遇到的问题及解决方法),陆续有园友向我们反馈登录时速度很慢(登录时是通过https访问),有些园友甚至无法访问登录页面. 而我 ...
- 云计算之路-阿里云上:禁用Windows虚拟内存引发的重启
昨天(2013年8月6日)下午,承载www.cnblogs.com主站的两台云服务器分别自动重启了1次,由于这两台云服务器使用了负载均衡(SLB),重启并未影响网站的正常访问. 与这次重启相关的Win ...
- 云计算之路-阿里云上:愚人节被阿里云OCS愚
今天是愚人节,而我们却被阿里云OCS愚,很多地方的缓存一直不过期,造成很多页面中的数据一直不更新.这篇博文将向您分享我们这两天遇到的OCS问题. 阿里云OCS(Open Cache Service)是 ...
- 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析
在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...
- 云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题
今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧. 而且3台服务器特地使用了不同的配置:1台是禁用了虚拟内存 ...
- 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障
3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...
- 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况
在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...
- 云计算之路-阿里云上:启用Windows虚拟内存引发的CPU 100%故障
今天上午11:35~11:40左右,由于负载均衡中的两台云服务器CPU占用突然飚至100%,造成网站5分钟左右不能正常访问,请大家带来了麻烦,请谅解! (上图中红色曲线表示CPU占用) 经过分析,我们 ...
- 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时
在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...
随机推荐
- Android 超简单的拖动按钮 悬浮按钮 吸附按钮
第一种 第二种 第一种实现方法 xml布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...
- Markdown引用图片,且不使用网上链接的解决方法
首先介绍下markdown使用图片的3种方法 使用本地图片,缺点是要用到本地的绝对路径,不适合对文档做迁移,否则会有图片链接失效的情况 
在python中,流程控制语句为强制缩进(4空格) if username=='lmc' and password=='123456': print('Welcome User {name} logi ...
- HDU 2191 悼念汶川地震(多重背包)
思路: 多重背包转成01背包,怎么转?把一种大米看成一堆单个的物品,每件物品要么装入,要么不装.复杂度比01背包要大.时间复杂度为O(vns)(这里S是所有物品的数量s之和).这个做法太粗糙了,但就是 ...
- 在IIS 7.5上安装WebDAV(http文件下载上传)
WebDAV 简介 WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1, ...
- SVN和Git的区别
这个地方就简单介绍一下 svn 的模式是: 1.写代码. 2.从服务器拉回服务器的当前版本库,并解决服务器版本库与本地代码的冲突. 3.将本地代码提交到服务器. Git分布式版本管理的模式是: 1.写 ...
- LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
题意即求一个最小顶点覆盖. 对于没有孤立点的图G=(V,E),最大独立集+最小顶点覆盖= V.(往最大独立集加点) 问题可以变成求树上的最大独立集合. 每个结点的选择和其父节点选不选有关, dp(u, ...
- 【洛谷2468】[SDOI2010] 粟粟的书架(二合一)
点此看题面 大致题意: 问你选取一个矩形区间内至少几个数,才能使它们的和\(\ge H_i\). 二合一 根据数据范围,比较显然能看出它是一道二合一的题目. 对于第一种情况,\(R,C\le 200\ ...
- C语言字符,字符串,字节操作常用函数
strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...
- AJAX进行分页
新建数据集:PagingDataSet.xsd SELECT * from ( select id, areaID, area, father,Row_Number() over (order by ...