我在 MacOS X 下的 CentOS 虚拟机上运行 PHP,任何 cURL 请求始终需要 15 秒才能运行:
$c = curl_init('https://graph.facebook.com');
curl_exec($c); // takes 15s to return...
echo curl_getinfo($c, CURLINFO_NAMELOOKUP_TIME); // 15.01 seconds
但是,gethostbyname()非常快:
echo gethostbyname('graph.facebook.com'); // almost instant
而且,ping
几乎可以立即解析名称。
默认情况下,/etc/resolv.conf
只有nameserver 192.168.1.1
在其中,所以我将其更改为使用 Google DNS 服务器:
nameserver 8.8.8.8
nameserver 8.8.4.4
但没有运气。有什么提示吗?
更新 1:以下解决了问题:
curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
据我了解,它正在尝试同时解析 IPv4 和 IPv6,并且在 15 秒超时后 IPv6 解析失败。
那是因为Linux机器上的配置错误吗?
更新 2:
dig graph.facebook.com aaaa
;; reply from unexpected source: 10.0.2.2#53, expected 192.168.1.1#53
;; reply from unexpected source: 10.0.2.2#60944, expected 192.168.1.1#53
;; reply from unexpected source: 10.0.2.2#53, expected 192.168.1.1#53
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.4 <<>> graph.facebook.com aaaa
;; global options: +cmd
;; connection timed out; no servers could be reached