The default HTTP-01 challenge asks Let’s Encrypt to fetch a file from http://YOUR_DOMAIN/ on port 80. It fails when DNS points elsewhere, port 80 is blocked, or a CDN answers instead of your server.
When to use
Nginx Proxy Manager or Zoraxy reports an error when requesting a certificate.
When not to
Do not retry in a loop. Let’s Encrypt rate-limits repeated failures for the same domain.
Prerequisites
Replace example.com with your domain
dnsutils for dig
Steps
1
Does DNS point to this server?
Read-only
DOMAIN=example.com
dig +short A "$DOMAIN"
curl -4 -s https://api.ipify.org; echo
Expect: The two IPs must match. A different IP means DNS is not updated yet, or a CDN proxy (such as the orange cloud on Cloudflare) is on.
2
Is port 80 served by the proxy?
Read-only
ss -lntp | grep -E ':(80|443) '
curl -sI "http://$DOMAIN/" | head -n 1
Expect: docker-proxy should own 80 and 443. Any HTTP status line means port 80 is reachable.
What it changes
Read-only. If DNS and port 80 are fine, check the provider security group for TCP 80, then retry once.