cURL 偶尔无法解析域名,而 dig 始终能成功解析

cURL 偶尔无法解析域名,而 dig 始终能成功解析

我们有两台机器定期使用 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 定期无法解析主机,但diggetent ahosts www.example.com可以正常工作。

相关内容