У меня есть дроплет приложения LEMP Digitalocean, настроенный для размещения моего веб-сайта (приложение PHP — CodeIgniter), я использую Nexmo SMS API в своем приложении, и до сегодняшнего дня все работало хорошо. Внезапно, теперь, когда я пытаюсь отправить SMS, у меня появляется эта ошибка «Не удалось разрешить хост: rest.nexmo.com». Похоже, cURL не работает, но когда я проверил, установлен ли он, он есть, и мой phpinfo также показывает это. Я перезапустил nginx, php5-fpm, попробовал несколько разных настроек curl в моем коде, но всегда получал эту ошибку.
Когда я попытался запустить простой скрипт, как это:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/');
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header');
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'read_body');
curl_exec($ch);
if ($error = curl_error($ch)) {
echo "Error: $error<br />\n";
}
function read_header($ch, $string)
{
$length = strlen($string);
echo "Received $length bytes<br />\n";
return $length;
}
результат по-прежнему «Ошибка: не удалось разрешить хост: www.google.com», поэтому я думаю, что проблема в cURL, а не в коде моего приложения (я использую библиотеку NEXMO CodeIgniter).
Я перепробовал все, что приходит мне в голову, и теперь у меня заканчиваются идеи, поэтому любая помощь ценится. Есть ли какие-то особые настройки / что нужно сделать, чтобы cURL работал с nginx, который мне не хватает? Может быть, что-то в файлах nginx.conf, или мне нужно открыть несколько портов и т. Д.?
Обратите внимание, что ошибка «Не удалось разрешить хост». Это указывает не на скручивание, а на библиотеку системного распознавателя. Curl сам по себе не выполняет поиск DNS, но вместо этого использует системные стандартные методы, обычно использующие libresolv. Если вы используете утилиту трассировки системных вызовов, такую как strace, вы увидите, что преобразователь затем управляется /etc/nsswitch.conf, /etc/host.conf и /etc/resolv.conf. Ваша первая точка вызова должна быть там. Вы можете проверить, что это система, а не скручивание, используя стандартный вызов файла PHP, например:
$web_content = file_get_contents("http://www.google.com/");
Это должно вернуть тело, если оно может разрешить хост.
Других решений пока нет …