gpt4 book ai didi

PHP cURL 始终需要 15 秒来解析 DNS

转载 作者:可可西里 更新时间:2023-11-01 13:12:13 24 4
gpt4 key购买 nike

我在 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

最佳答案

问题是我的机器上的 IPv6 查找失败。解决方案:

/etc/resolv.conf 更改为:

nameserver 8.8.8.8
nameserver 8.8.4.4

重新启动后,resolv.conf 被覆盖,因此将此行添加到 /etc/sysconfig/network-scripts/ifcfg-eth0(使用 BOOTPROTO=dhcp) 修复了问题:

PEERDNS=no

现在一切都像魅力一样。

作为替代方案,如果您在无法更改配置的服务器上遇到此问题,请按以下方式配置 cURL:

curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

关于PHP cURL 始终需要 15 秒来解析 DNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17814925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com