这听起来可能是一个愚蠢的问题,可能只是 HTTP 协议的一部分,但对于调试我遇到的问题可能很重要。
我们有一些 PHP 代码,使用 php-curl 函数从 API 中获取响应并保存它。该代码在我们的开发和暂存服务器上运行良好,但在进入负载平衡生产设置时会中断。为了测试我的理智,我从负载平衡器中拉出一台服务器并再次运行它,它没有产生错误。
所以我怀疑这是由于负载均衡器造成的。打开 curl 时,它是否说记录主机的 IP 以进行返回寻址?它是否可以抓取负载均衡器的 IP,然后返回到任何未打开连接的任意服务器以等待响应?
我已经看到,有多种方法可以解决负载均衡器后面的特定 IP /资源,但没有看到任何确保响应返回发起者的方法。
编辑细节:生产站点托管在 6 个节点上,Rackspace 上的 1 个负载均衡器使用完全相同的代码。我对负载均衡器的操作(如打开端口)有 1% 的控制权,因此我需要确定问题是否出在它身上。curl 代码正在处理第三方 API,我们必须将其视为黑盒(可能也是负载均衡的)。
带有混淆/简化的代码:
// Check that we have a Video ID value and it's not empty, check if the created date has changed
if (isset($node->field_video_id['und'][0]['value']) && $node->field_video_id['und'][0]['value'] != '' && $node->created != $node->original->created) {
$result = db_query('SELECT value FROM {livestream_event} WHERE video_id='. $node->field_video_id['und'][0]['value'] . '');
foreach($result as $item) {
$event_id = $item->value;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://<API IP>/livestreamauth.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$token_data = curl_exec($ch);
$token_data = json_decode($token_data);
// use all the data and persist to db once it theoretically gets back.
}