Afin d'optimiser au mieux nos serveurs pod, je vous invite à partager ce que chacun a pu mettre en place pour optimiser son serveur.
Avant propos
Si vous souhaitez savoir ou se situe votre serveur Pod en terme d'optimisation, je vous propose de le tester par exemple via PageSpeed :
https://developers.google.com/speed/pagespeed/insights
À titre de référence, le serveur pod.univ-lille.fr donne les scores suivants en février 2021 (pod v2.7.3.1) :
- Page d'accueil : mobile 66% / desktop 88%
- Sur une vidéo : mobile 31% / desktop 71%
(plus le score est élevé, mieux c'est)
À Nice
Avant toute optimisation, on avait les résultats suivants :
- Pour un lien vers une vidéo : mobile 22% / desktop 57%
- page d'accueil : on avait pas regardé
Au niveau d'nginx, voici ce qu'on a fait :
Indiquer à nginx de servir des versions compressées des fichiers statics
Avec ca, lorsque nginx trouve un fichier "file.css.gz" dans le dossier static, il l'envoie à la place de la version standard (le navigateur fera la décompression)
location /static { gzip_static on; gzip_types text/plain application/xml text/css text/javascript application/javascript image/svg+xml; [...] }
Pour que ca marche bien, il faut bien sûr avoir des fichier ".gz", on lance donc manuellement un script shell :
#!/bin/bash # Generate compressed versions of all statics files to be served by nginx cd podv2/pod/static/ for file in $(find . -type f) do if [[ $file =~ .*\.(css|js|svg)$ ]] then gzip -fk "$file" fi done
==> cette étape pourrait être inutile à partir du moment ou on installe https://github.com/whs/django-static-compress
2. Activer la compression à la volée par nginx des contenus textuels non statics
pour optimiser la bande passante, on peux aussi améliorer les perfs en demandant à nginx de compresser à la volée les contenus textuels. voici ce qu"on a ajouté à pod_nginx.conf :
# Django media location /media { gzip on; gzip_types text/vtt; [...] } [...] # Finally, send all non-media requests to the Django server. location / { gzip on; uwsgi_pass django; [...] }
nb : pour que les fichiers vtt soient reconnus comme texte, on les a ajoutés comme "text/vtt" dans /etc/ningx/mime.types
3. Mise en cache
Nous avons défini la politique de mise en cache suivante (1 an sur /media, 60j sur /static) :
Pour plus d'infos sur l'importance de définir des "expires", je vous invite à suivre cette doc : Éviter les mises en cache de durée imprévisible des fichiers statiques
location /media { expires 1y; add_header Cache-Control "public"; [...] } location /static { expires 60d; add_header Cache-Control "public"; [..] }
==> avec l'ensemble de ces changements, on est passé d'un score de 22/57 à 40/77 (mobile/desktop) à Nice
Sur la page d'accueil, on est aujourd'hui à 81%/95%