Files
fdn2/cicd/nginx/README.md
2026-07-12 23:00:46 +02:00

2.3 KiB

Reverse proxy nginx + Let's Encrypt

Reverse proxy nginx davanti ad Apache per ifattidinapoli.it. I certificati SSL sono gestiti automaticamente da Let's Encrypt tramite certbot (validazione HTTP-01 via webroot), con un unico certificato multi-dominio (SAN) che copre tutti gli host serviti da questo nginx.

Domini coperti dal certificato

  • www.ifattidinapoli.it (primario / CN)
  • ifattidinapoli.it
  • preproduction.ifattidinapoli.it
  • test.ifattidinapoli.it

La lista si definisce nell'array domains di init-letsencrypt.sh. Il primo dominio e' il primario e da' il nome alla cartella /etc/letsencrypt/live/<primario>/ referenziata in nginx.conf.

Primo setup

Prerequisiti:

  • La rete docker esterna nginx-network deve esistere (docker network create nginx-network).
  • Le porte 80 e 443 dell'host devono essere pubblicamente raggiungibili per tutti i domini (la validazione HTTP-01 passa dalla porta 80).
  • I record DNS di tutti i domini devono puntare a questo server.
# 1. (consigliato) prova prima in staging: metti staging=1 in init-letsencrypt.sh
./init-letsencrypt.sh

# 2. verifica che tutto funzioni, poi rimetti staging=0 e rilancia
./init-letsencrypt.sh

Lo script:

  1. scarica i parametri TLS raccomandati,
  2. crea un certificato dummy self-signed cosi' nginx puo' partire,
  3. avvia nginx,
  4. cancella il dummy e richiede il certificato reale a Let's Encrypt,
  5. ricarica nginx.

Rinnovo

Il rinnovo e' automatico. renew.sh lancia certbot renew (che rinnova solo se manca meno di 30 giorni alla scadenza) e ricarica nginx.

Schedularlo in crontab sull'host (crontab -e):

0 3 * * * cd /percorso/di/cicd/nginx && ./renew.sh > /tmp/renew.log 2>&1 || logger -t CRON_RENEW -f /tmp/renew.log

Se lo script fallisce, l'output finisce in syslog; altrimenti nessun output.

Note sulla migrazione da Sectigo

  • I vecchi certificati Sectigo sono in ssl/. Il mount ./ssl:/etc/ssl:ro in docker-compose.yml e i file in ssl/ possono essere rimossi una volta verificato che Let's Encrypt funziona.
  • La cartella certbot/ (chiavi private incluse) e' in .gitignore e non va committata. Le vecchie chiavi Sectigo sono invece presenti nella history git: valutare con il fornitore se revocarle.