Posso confermare che il rinnovo di letsencrypt fallisce. Gestisco un’installazione Discourse self-hosted da anni, e molto stranamente il rinnovo è fallito per me due volte di seguito negli ultimi due mesi. La seconda volta è stata questa mattina, e così ho iniziato a indagare.
L’ho ricondotto ai seguenti due commit:
E la riga pertinente collegata:
Ci sono due problemi, credo.
Primo, return 301 https://${DISCOURSE_HOSTNAME}$request_uri; viene trasformato in return 301 https://<NOME_MIO_SERVER> senza un $request_uri alla fine. L’ho verificato sulla mia installazione self-hosted, e anche su quella di un amico impostata la scorsa settimana. Non capisco come funzioni il template di Discourse, quindi non so perché venga eliminato.
Secondo, come menzionato da @lessLost, il redirect 301 è al di fuori del blocco location. Credo che un redirect a livello di server sovrascriva tutti i blocchi location. LetsEncrypt usa http per i rinnovi. Tuttavia, qualsiasi tentativo di curl -I http://TUA_DOMINIO/.well-known/acme-challenge/test restituirà un 301 a https, invece di un 404 (che è il comportamento atteso; vogliamo un 404 non un 301).
Ho risolto questo problema manualmente sulla mia installazione self-hosted, ma mi aspetto che qualsiasi aggiornamento sovrascriva le mie modifiche. Purtroppo non capisco abbastanza i template per inviare una pull request @pfaffman — altrimenti lo farei anch’io.
Modificato per aggiungere:
Credo che questo sia un errore —
Sono abbastanza certo che LetsEncrypt usi http per impostazione predefinita (per ovvie ragioni, se il certificato è scaduto non può rinnovarsi!) Ma posizionare il 301 a livello di blocco server forza tutte le richieste a 301 su https, il che è incoerente con questa strategia di rinnovo.