背景信息:
1,特定ECS实例往CDN节点上post 数据走https协议失败,返回curl: (52) Empty reply from server
2,透过cdn直接post源站正常(源站仅支持http协议)
3,其他ECS post cdn节点正常
4,切换cdn节点进行post也不行
示意图:(画的比较渣,大家海涵)
排查过程:
1,CDN回源走的80端口,进行抓包排查(过滤特殊的测试url)
过滤条件 “ http contains "testYjyCallback"”
根据抓包确认,问题出现在客户端到cdn这两点之间,因为实际的请求没有回源(看到的成功的请求是正常的机器,只有一个客户端post失败)
2,客户端抓包,对比正常的https请求的包和异常的包
异常
正常
注意:正常的包发送的tlsv1.2版本,异常的包发送的是tlsv1的版本
3,客户端手动指定curl证书版本 curl -1 ,访问成功
curl --data "param1=value1¶m2=value2" https://gun***6.m****bx.com/Mobile/Test/testYjyCallback --tlsv1.2
注意:--tlsv1.2等同于-1,还可以发送--tlsv1.0 --tlsv1.1
4,抓包可以看到指定的-1实际请求https协商是tlsv1.2
5,客户端测试指定tls版本 --tlsv1.0 测试不通过,其他机器使用tlsv1.0到cdn同一个节点正常。
未解之谜:判断客户端的curl版本或者openssl版本可能存在兼容性问题导致