
我們有兩台機器使用 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
始終如一。