đ Routing, nginx et cache¶
Le projet est actuellement dĂ©ployĂ© sur Scalingo, Scalingo qui impose une limite de 50 requĂȘtes/seconde sur un worker. Nous avons dĂ©cidĂ© dâajouter Nginx en janvier 2025 afin dâagir comme serveur de cache et anticiper sur lâatteinte de cette limite.
nginx¶
Dans lâhypothĂšse dâun pic de charge,
Le cache de certaines vues Django (dĂ©chet / produit, page dâaccueil de lâassistantâŠ)
Le cache des fichiers statiques (CSS, JSâŠ)
Des images valant mille mots, ci-dessous un schĂ©ma rĂ©sumant le parcours dâune requĂȘte lorsquâelle atteint lvao.ademe.fr
ou quefairedemesdechets.ademe.fr
sequenceDiagram participant Client participant Nginx participant Django Client->>Nginx: Request lvao.ademe.fr alt Cache Hit Nginx-->>Client: Return cached response else Cache Miss Nginx->>Django: Forward request to Django Django-->>Nginx: Generate response alt Authenticated User Django->>Nginx: Add 'logged_in' cookie end alt iframe query param present Django->>Nginx: Add iframe cookie end Nginx-->>Client: Return Django response end
Les cookies dĂ©finis expirent Ă la fin de la session, cela veut dire quâils seront re-gĂ©nĂ©rĂ©s si lâutilisateur ferme son navigateur.
Whitenoise¶
Les fichiers statiques sont servis via Whitenoise, cela afin de gĂ©rer finement le cache de ceux-ci. La documentation officielle rĂ©pond aux principales questions que lâon peut se poser Ă ce sujet :
Pourquoi pas charger les statiques depuis un S3 ?
Comment servir les fichiers statiques derriĂšre une reverse proxy ?
Dans notre cas, Whitenoise fonctionne de la maniĂšre suivante :
Ă chaque dĂ©ploiement, les fichiers statiques sont suffixĂ©s dâun hash de leur contenu
La durĂ©e de mise en cache est infinie pour ces fichiers. Cela peut ĂȘtre fait sans risque car sâils sont modifiĂ©s, le hash changera
Middlewares¶
Le fonctionnement décrit ci-dessous concernant Nginx est défini dans un middleware Django (qfdmd/middleware.py
).