zoukankan      html  css  js  c++  java
  • 云计算之路-阿里云上:在SLB上部署https遇到的问题及解决方法团队

    一、问题场景

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

    二、https部署场景

    1. 阿里云SLB的配置:

    阿里云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 1 weakhostsend=enabled
    netsh interface ipv4 set interface 1 weakhostreceive=enabled
    
    netsh interface ipv4 set interface 15 weakhostsend=enabled
    netsh interface ipv4 set interface 15 weakhostreceive=enabled
    
    netsh interface ipv4 set interface 17 weakhostsend=enabled
    netsh interface ipv4 set interface 17 weakhostreceive=enabled
    
    netsh interface ipv4 set interface 29 weakhostsend=enabled
    netsh interface ipv4 set interface 29 weakhostreceive=enabled

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

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

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

    六、参考资料

    七、相关链接

  • 相关阅读:
    javascript 延迟
    ashx获取另一个页面的返回内容
    Handler实现数据模板
    font-face 在 Firefox无法正常工作问题
    离线缓存 manifest
    事件 event
    源码学习
    调试
    Icon font font face
    aria-label
  • 原文地址:https://www.cnblogs.com/cmt/p/aliyun-slb-https.html
Copyright © 2011-2022 走看看