location / { # Le service n'écoute que sur la boucle locale (cf. conf/systemd.service). # nginx est le seul chemin d'accès, et donc le seul endroit où l'identité # est établie. proxy_pass http://127.0.0.1:__PORT__; # --------------------------------------------------------------------------- # Intégration SSOwat — c'est cette ligne qui rend `YNH_USER` fiable # --------------------------------------------------------------------------- # `proxy_params_with_auth` (fourni par YunoHost) transmet à l'application les # en-têtes d'identité, là où `proxy_params_no_auth` les vide explicitement. # # Deux jeux d'en-têtes coexistent, et ce n'est pas une redondance : # - SSOwat (Lua, `access.lua`) injecte `YNH_USER`, `YNH_USER_EMAIL` et # `YNH_USER_FULLNAME` dans la requête ; c'est ce que MaBibli lit. # - `proxy_params_with_auth` ajoute par-dessus `Ynh-User`, `Ynh-User-Email`, # `Ynh-User-Fullname`, `REMOTE_USER` et `X-Forwarded-User`, recopiés depuis # les précédents pour les applications qui attendent la forme à tirets. # # Anti-usurpation : avant toute injection, SSOwat efface *tous* les en-têtes # entrants dont le nom commence par `ynh_` ou `ynh-`, sans distinction de casse. # Un client ne peut donc pas fournir son propre `YNH_USER` — à condition que la # requête passe bien par nginx, d'où la contrainte d'écoute sur 127.0.0.1. include proxy_params_with_auth; # Le client Blazor télécharge des assemblies .wasm de plusieurs mégaoctets, et le # premier chargement en enchaîne beaucoup. Des tampons plus larges évitent que # nginx ne les fasse transiter par des fichiers temporaires. proxy_buffers 16 32k; proxy_buffer_size 32k; # Le lookup ISBN interroge la BnF puis OpenLibrary en cascade, avec un délai de # 10 s par source côté application : laisser à nginx une marge au-dessus. proxy_read_timeout 60s; # Aucun envoi de fichier : les ebooks sont des fiches, pas des fichiers # (CLAUDE.md, « Ebooks : fiches uniquement »). Une limite basse suffit. client_max_body_size 1m; # `application/wasm` n'est pas dans la liste gzip par défaut, et les assemblies # Blazor se compressent très bien. gzip on; gzip_min_length 1024; gzip_proxied any; gzip_types application/wasm application/octet-stream application/json application/javascript text/css text/plain application/manifest+json; }