Problème
Après un redéploiement, les navigateurs avec un onglet ouvert ou un index.html en cache demandent les anciens fichiers JS hashés par Vite (ex: index-CcuS1ukv.js) qui n'existent plus.
Deux symptômes :
- 404 sur les anciens assets
- "type MIME interdit (text/html)" — le
try_files ... /index.html sert du HTML à la place du JS manquant
Logs :
frontend-1 | [error] open() "/usr/share/nginx/html/assets/index-CcuS1ukv.js" failed (2: No such file or directory)
Le chargement du module à l'adresse « https://www.veaf.org/assets/index-BDzLx6k2.js » a été bloqué en raison d'un type MIME interdit (« text/html »).
Cause
index.html n'a pas de headers anti-cache → le navigateur peut servir une version en cache qui référence d'anciens assets hashés
- Le
try_files $uri $uri/ /index.html dans frontend/nginx.conf sert du HTML quand un asset JS n'existe plus → erreur MIME
Solution
1. frontend/nginx.conf
Ajouter :
location = /index.html avec Cache-Control: no-cache, no-store, must-revalidate
location /assets/ avec try_files $uri =404 (pas de fallback SPA)
2. deploy/nginx.conf
Ajouter les directives proxy_pass_header pour propager les headers Cache-Control du frontend nginx.
Vérification
# index.html ne doit PAS être caché
curl -I https://www.veaf.org/
# → Cache-Control: no-cache, no-store, must-revalidate
# Un asset manquant doit retourner 404 (pas du HTML)
curl -I https://www.veaf.org/assets/nonexistent.js
# → HTTP 404
# Les assets existants restent cachés longtemps
curl -I https://www.veaf.org/assets/index-XXXXX.js
# → Cache-Control: public, immutable
Problème
Après un redéploiement, les navigateurs avec un onglet ouvert ou un
index.htmlen cache demandent les anciens fichiers JS hashés par Vite (ex:index-CcuS1ukv.js) qui n'existent plus.Deux symptômes :
try_files ... /index.htmlsert du HTML à la place du JS manquantLogs :
Cause
index.htmln'a pas de headers anti-cache → le navigateur peut servir une version en cache qui référence d'anciens assets hashéstry_files $uri $uri/ /index.htmldansfrontend/nginx.confsert du HTML quand un asset JS n'existe plus → erreur MIMESolution
1.
frontend/nginx.confAjouter :
location = /index.htmlavecCache-Control: no-cache, no-store, must-revalidatelocation /assets/avectry_files $uri =404(pas de fallback SPA)2.
deploy/nginx.confAjouter les directives
proxy_pass_headerpour propager les headers Cache-Control du frontend nginx.Vérification