我们有两台机器定期使用 cURL 查询各种外部资源。从几天前开始,这些请求开始间歇性地失败Could not resolve host: www.example.com
。
或者从命令行:
curl: (6) Could not resolve host: www.example.com
这种情况发生在许多不同的域中,但显然不是所有域。我编写了一个脚本,尝试每 5 秒连接到其中一个域,并使用 dig 和 getent 查找它。curl 调用通常每隔几分钟就会失败约一分钟,而 dig 和 getent 一致解析成功。以下是脚本:
#!/bin/bash
for i in {1..500}
do
printf "\ndig short:\n"
dig +short www.example.com
printf "\ngetent:\n"
getent ahosts www.example.com
printf "\ncURL v4:\n"
curl -sSI -4 https://www.example.com
sleep 5
done
当 curl 失败时,原始输出如下:
dig short:
r9fe7.x.incapdns.net.
107.154.108.172
getent:
107.154.108.172 STREAM r9fe7.x.incapdns.net
107.154.108.172 DGRAM
107.154.108.172 RAW
cURL v4:
curl: (6) Could not resolve host: www.example.com
我尝试在 /etc/resolv.conf 中指定各种公共名称服务器,包括 1.1.1.1 和 8.8.8.8,但均无效。我还尝试明确设置 dig 和 curl 的名称服务器,但 dig 仍然始终成功,而 curl 偶尔无法解析。
在 /etc/nsswitch.conf 中我有
hosts: files dns myhostname
我不确定还有什么可能导致 curl 定期无法解析主机,但dig
和getent ahosts www.example.com
可以正常工作。