Nginx va in crash-loop dopo il riavvio del contenitore: l'immagine base include brotli_static in discourse.conf ma non carica mai il modulo (direttiva sconosciuta)

Riepilogo
Dopo un normale riavvio del contenitore (riavvio dell’host / docker restart), nginx non riesce ad avviarsi all’interno del contenitore app con il seguente errore:

nginx: [emerg] unknown directive "brotli_static" in /etc/nginx/conf.d/discourse.conf:172

Questo porta l’intero sito offline (nessun fallback — nginx non si lega mai alle porte 80/443) fino a quando non viene applicata una patch manuale.

Ambiente

  • Immagine base: discourse/base:2.0.20260812-0036
  • nginx: 1.26.3-3+deb13u7 (pacchetto Debian 13/trixie, non compilato su misura)
  • Sono installati libnginx-mod-http-brotli-static/-filter 1.0.0~rc-6 e i symlink in /etc/nginx/mods-enabled/*.conf (con le righe load_module corrette) esistono e puntano a file .so validi.

Causa principale
/etc/nginx/nginx.conf (di proprietà del pacchetto nginx-common, non modificato) non contiene la direttiva include /etc/nginx/modules-enabled/*.conf;, quindi i moduli Brotli installati non vengono mai caricati — mentre discourse.conf (generato dai template di Discourse) continua a emettere brotli_static on; dando per scontato che lo siano.

Perché non fallisce immediatamente
La configurazione viene rielaborata solo quando nginx si (ri)avvia effettivamente. Un contenitore appena ricostruito può funzionare correttamente per giorni/settimane fino a quando qualcosa non riavvia nginx (riavvio dell’host, docker restart, OOM, ecc.), a quel punto inizia a entrare in crash-loop in modo silenzioso (~1×/sec) senza alcun recupero automatico.

Soluzione temporanea
Aggiungere include /etc/nginx/modules-enabled/*.conf; come prima riga di /etc/nginx/nginx.conf (contesto principale, prima di events {}). Confermato che questo ripristina il successo di nginx -t e il funzionamento normale.

Richiesta
L’immagine base potrebbe (a) aggiungere questo include al suo nginx.conf, oppure (b) rimuovere brotli_static/brotli dal template discourse.conf fornito se la build del pacchetto nginx della distribuzione non include più il supporto Brotli in modo predefinito?