codeigniter — не удалось разрешить хост — не удается заставить cURL работать с php на nginx

У меня есть дроплет приложения 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, или мне нужно открыть несколько портов и т. Д.?

2

Решение

Обратите внимание, что ошибка «Не удалось разрешить хост». Это указывает не на скручивание, а на библиотеку системного распознавателя. Curl сам по себе не выполняет поиск DNS, но вместо этого использует системные стандартные методы, обычно использующие libresolv. Если вы используете утилиту трассировки системных вызовов, такую ​​как strace, вы увидите, что преобразователь затем управляется /etc/nsswitch.conf, /etc/host.conf и /etc/resolv.conf. Ваша первая точка вызова должна быть там. Вы можете проверить, что это система, а не скручивание, используя стандартный вызов файла PHP, например:

$web_content = file_get_contents("http://www.google.com/");

Это должно вернуть тело, если оно может разрешить хост.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]