无法解析主机-Can';不要让cURL在nginx上使用php

无法解析主机-Can';不要让cURL在nginx上使用php,php,codeigniter,curl,nginx,nexmo,Php,Codeigniter,Curl,Nginx,Nexmo,我已经将Digitalocean LEMP应用程序dropplet配置为托管我的网站(PHP-CodeIgniter应用程序),我在我的应用程序中使用了Nexmo SMS API,直到今天一切都运行良好。突然,当我尝试发送短信时,我出现了一个错误“无法解析主机:rest.nexmo.com”。看起来cURL不起作用,但当我检查它是否已安装时——它已安装,我的phpinfo也显示了它。我重新启动了nginx,php5-fpm,在代码中尝试了一些不同的curl设置,但总是出现这个错误 当我尝试运行这

我已经将Digitalocean LEMP应用程序dropplet配置为托管我的网站(PHP-CodeIgniter应用程序),我在我的应用程序中使用了Nexmo SMS API,直到今天一切都运行良好。突然,当我尝试发送短信时,我出现了一个错误“无法解析主机: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;
}
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://www.google.com/');
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_header函数,'read_header');
curl_setopt($ch,CURLOPT_WRITEFUNCTION,'read_body');
curl_exec($ch);
如果($error=curl\u error($ch)){
echo“Error:$Error
\n”; } 函数read_头($ch,$string) { $length=strlen($string); echo“接收到$length字节
\n”; 返回$length; }
结果仍然是“错误:无法解析主机:www.google.com”,所以我认为问题出在cURL中,而不是我的应用程序代码中(我使用的是NEXMO CodeIgniter库)

我尝试了我脑海中出现的一切,现在我的想法都快用完了,所以我非常感谢每一个帮助。有没有什么特别的设置/事情可以连接/使cURL与nginx一起工作,而我没有?可能是nginx.conf文件中的某些内容,或者我需要打开一些端口,等等?

请注意,错误是“无法解析主机”。这并不指向curl,而是指向系统解析器库。Curl本身不进行DNS查找,而是使用系统标准方法,通常使用libresolv。如果使用像strace这样的系统调用跟踪实用程序,您将看到解析程序随后由/etc/nsswitch.conf、/etc/host.conf和/etc/resolv.conf控制。你的第一个呼叫点应该在那里。通过使用标准PHP文件调用,您可以测试它是否为system而不是curl,如:

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

如果可以解析主机,则应返回正文。

您还可以检查名称解析是否直接从服务器工作。“ping www.google.com”应该可以做到这一点。你们都是对的,当我尝试file\u get\u contents时,我得到的结果是:“file\u get\u contents():php\u network\u getaddressions:getaddrinfo failed:中不知道名称或服务”,当我ping google.com时,结果是相同的:“无法解析主机”。我认为这是cURL错误,因为在我的应用程序错误日志中是:“[Nexmo]cURL错误:无法解析主机:rest.Nexmo.com”,所以我只尝试修复cURL。那么,我应该如何解决这个问题?在我的etc/resolv.conf中,只有一个名称:nameserver127.0.0.1。在host.conf文件中是“order hosts,bind multi on”。在nsswitch.conf中还有一些东西。