Boucle de crash d'Nginx après redémarrage du conteneur : l'image de base inclut brotli_static dans discourse.conf mais ne charge jamais le module (directive inconnue)

Résumé
Après un redémarrage régulier du conteneur (redémarrage de l’hôte / docker restart), nginx échoue à démarrer dans le conteneur app avec l’erreur suivante :

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

Cela met le site entier hors ligne (aucune solution de repli — nginx ne se lie jamais aux ports 80/443) jusqu’à ce qu’un correctif manuel soit appliqué.

Environnement

  • Image de base : discourse/base:2.0.20260812-0036
  • nginx : 1.26.3-3+deb13u7 (paquet Debian 13/trixie, non compilé sur mesure)
  • libnginx-mod-http-brotli-static/-filter 1.0.0~rc-6 sont installés, et les liens symboliques /etc/nginx/mods-enabled/*.conf (avec les lignes load_module correctes) existent et pointent vers des fichiers .so valides.

Cause racine
/etc/nginx/nginx.conf (appartenant au paquet nginx-common, non modifié) ne contient pas la directive include /etc/nginx/modules-enabled/*.conf;, de sorte que les modules Brotli installés ne sont jamais chargés — tandis que discourse.conf (généré par les modèles Discourse) émet toujours brotli_static on; en supposant qu’ils le sont.

Pourquoi l’échec n’est pas immédiat
La configuration n’est réanalysée que lorsque nginx redémarre réellement. Un conteneur nouvellement reconstruit peut fonctionner correctement pendant des jours ou des semaines jusqu’à ce que quelque chose redémarre nginx (redémarrage de l’hôte, docker restart, OOM, etc.), moment où il commence à boucler silencieusement sur les erreurs (~1 fois/seconde) sans récupération automatique.

Contournement
Ajouter include /etc/nginx/modules-enabled/*.conf; comme première ligne de /etc/nginx/nginx.conf (contexte principal, avant events {}). Cela a permis de confirmer le retour à un état de succès de nginx -t et un fonctionnement normal.

Demande
Le paquet d’image de base pourrait-il soit (a) ajouter cet include à son nginx.conf, soit (b) supprimer brotli_static/brotli du modèle discourse.conf fourni si la construction du paquet nginx de la distribution n’inclut plus le support Brotli par défaut ?