我发出以下请求,导致服务器空回复。
Originate server : AWS ec2 / PHP 5.4 / Guzzle
Remote server : AWS ec2 through elb
CURL info :{
"url":"https:\/\/xxx\/xxx",
"content_type":null,
"http_code":0,
"header_size":0,
"request_size":5292,
"filetime":-1,
"ssl_verify_result":0,
"redirect_count":0,
"total_time":120.987057,
"namelookup_time":0.000277,
"connect_time":0.001504,
"pretransfer_time":0.014271,
"size_upload":2430,
"size_download":0,
"speed_download":0,
"speed_upload":20,
"download_content_length":-1,
"upload_content_length":2430,
"starttransfer_time":60.998147,
"redirect_time":59.988895,
"certinfo":[],
"primary_ip":"54.169.126.111",
"primary_port":443,
"local_ip":"192.168.2.111",
"local_port":39522,
"redirect_url":""
}
CURL error : [curl] 52: Empty reply from server [url] https:\/\/xxx\/xxx
请注意,这不会一直发生。
似乎请求甚至没有到达目的地(elb),因为没有与请求相关的日志
1.原始服务器或远程服务器的问题是什么?
2.“starttransfer_time”:60.998147这可能是根本原因吗?
欢迎解决方案,变通方法,建议。谢谢!
答案 0 :(得分:0)
因为似乎请求从未到达服务器, 检查网络错误。任何TCP重传/超时或任何错误。正如你所说,没有回复意味着TCP超时? 运行tcpdump并根据您可以决定的内容分析跟踪。
此外,您可以在Originate和Remote服务器中的两个应用程序中启用日志级别。 检查错误模式,例如:是否因为高负载?
答案 1 :(得分:0)
在我的情况下,“来自服务器的空答案”是由远程服务器上耗尽的内存引起的。在这种情况下,抛出致命错误并终止请求。
使用curl_setopt($h, CURLOPT_VERBOSE, true);
调试cURL没有帮助,因为只有“Connection死了,重试新连接”然后“从服务器清空回复”。我们不得不在远程服务器端进行调试。