nginx:alpine ne connaît pas l'extension .mjs par défaut et la servait en application/octet-stream — le navigateur refusait d'exécuter les modules ES (browser-image-compression.mjs, qrcode-generator.mjs), ce qui plantait silencieusement TOUT le JS qui les importe : page upload invité bloquée sur "Chargement...", générateur QR et carton imprimable cassés depuis leur déploiement. Aucune erreur visible sans ouvrir la console navigateur. Découvert suite à un vrai test d'upload de Kévin depuis son téléphone.
39 lines
1.2 KiB
Plaintext
39 lines
1.2 KiB
Plaintext
server {
|
|
listen 80;
|
|
server_name _;
|
|
root /usr/share/nginx/html;
|
|
index index.html;
|
|
|
|
# nginx:alpine ne connaît pas l'extension .mjs par défaut et la sert en
|
|
# application/octet-stream -> le navigateur refuse d'exécuter le module
|
|
# ES (import bloqué), ce qui fait planter silencieusement tout script
|
|
# qui l'importe (constaté en prod le 2026-09-16 : browser-image-
|
|
# compression.mjs importé par upload.js, page bloquée sur "Chargement...").
|
|
location ~ \.mjs$ {
|
|
types { text/javascript mjs; }
|
|
default_type text/javascript;
|
|
try_files $uri =404;
|
|
}
|
|
|
|
# /e/<slug> -> page upload invité, le slug est lu côté client via
|
|
# window.location.pathname (cf. src/e/upload.js)
|
|
location /e/ {
|
|
try_files $uri $uri/ /e/index.html;
|
|
}
|
|
|
|
# /admin/<slug>?token=... -> galerie admin, slug lu côté client.
|
|
# /admin/qrcode/ reste servi tel quel (fichier réel, try_files le trouve
|
|
# avant de tomber sur le fallback ci-dessous).
|
|
location /admin/ {
|
|
try_files $uri $uri/ /admin/gallery/index.html;
|
|
}
|
|
|
|
location /vendor/ {
|
|
try_files $uri =404;
|
|
}
|
|
|
|
location = / {
|
|
return 302 /e/;
|
|
}
|
|
}
|