Я бегу PHP на виртуальной машине CentOS под MacOS Х, и любой запрос Curl последовательно принимает 15s запустить:PHP Curl последовательно принимает 15s разрешить DNS
$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
в нем, так что я изменил его использовать DNS-серверы Google:
nameserver 8.8.8.8
nameserver 8.8.4.4
Но не повезло. Любые намеки?
Update 1: следующие исправления проблемы:
curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
Так, насколько я понимаю, он пытается решить как IPv4, так и IPv6, и разрешение IPv6 терпит неудачу, после тайм-аута 15 с.
Это из-за неправильной конфигурации на машине Linux?
Update 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
Сколько времени это займет, если вы 'curl_init («https://66.220.152.19»);' –
Вы можете сделать захват пакетов и убедитесь, что завиток правильно сообщать об этом? – Barmar
@Alex Я пробовал его с IP-адресом, и это очень быстро. Определенно проблема DNS, как подчеркнуто 'CURLINFO_NAMELOOKUP_TIME'. – Benjamin