Plainnotes

Three usual reasons certbot renewal fails

2026-04-01 · 2 min readDeploy

Renewal starts thirty days before expiry, so an expiry warning means it has been failing for a while.

Run certbot renew --dry-run and read the output. Three usual causes.

Could not bind TCP port 80 — something else holds it, often another nginx or a stuck certbot. ss -lntp | grep :80.

Invalid response ... 404 — wrong webroot path, or nginx redirecting /.well-known/ to https.

DNS problem: NXDOMAIN — the name resolves elsewhere or the A record was removed, common right after moving hosts.

Fix it, then require a passing dry run. Do not wait for the real expiry to find out.