Come appare il messaggio
$ curl -I https://shop.example.com
curl: (6) Could not resolve host: shop.example.comCause frequenti
- Il nome host è scritto male, oppure il record non esiste ancora, ad esempio dopo un nuovo dominio, un nuovo sottodominio o una migrazione DNS.
- Questa macchina usa un resolver che fallisce o ha dati vecchi, mentre altri vedono il record.
- Il record esiste solo in un'altra zona o nel DNS interno, non nel DNS pubblico.
/etc/hostso un dominio di ricerca sovrascrive o modifica il nome.- Il server non ha alcun DNS funzionante (vedi “Temporary failure in name resolution”).
Verifica
- Cosa dice il resolver di sistema? È quello che usa curl
getent hosts shop.example.com - Cosa dice il DNS pubblico?
- I server autorevoli hanno il record?
dig shop.example.com +trace +short - C'è una sovrascrittura in hosts?
grep -n 'example' /etc/hosts
Soluzione
- Controlla la grafia del nome host nel comando, nella configurazione o nell'URL.
- Se il DNS pubblico non mostra alcun record, aggiungilo presso il tuo provider DNS e attendi che passi il TTL di una risposta negativa.
- Se il DNS pubblico ha il record ma fallisce solo questa macchina, ripara il resolver locale (
resolvectl status) o svuota la sua cache:sudo resolvectl flush-caches. - Se con un IP funziona, prova con
curl --resolve shop.example.com:443:203.0.113.10 https://shop.example.comper separare il DNS dal web server. - Rimuovi righe errate da
/etc/hostse controlla il dominio di ricerca inresolvectl status.
Domande frequenti
dig funziona ma curl no. Perché?
dig interroga direttamente il DNS, curl usa il resolver di sistema, che legge anche /etc/hosts e ha una sua cache. Confronta con getent hosts.
Quanto ci vuole perché un nuovo record funzioni ovunque?
Dipende dal TTL e dalle risposte negative in cache. Vedi lo strumento TTL e l'articolo sulla propagazione DNS.