Le serveur web Nginx est réellement très rapide. On peut encore améliorer la rapidité de Nginx, en mettant en oeuvre des techniques de caching fastcgi. Il existe des alternatives comme apc, php5-xcache, ... Je vous présente comment avoir un cache fastcgi, en utilisant uniquement Nginx.
L'optimisation backend d'un serveur web est un élément important, mais non primordiale, dans le temps de chargement d'une page web par le browser. Néanmoins, l'optimisation de l'infrastructure du serveur web, est importante pour assurer une plus grande scalabilité et ainsi permettre une montée en charge importante.
Je vous propose une visite guidée dans la chaîne de génération d'une page web au sein d'un serveur ou d'un ensemble de serveurs. Notre fusée est composée généralement de 3 étages :
Pour améliorer les performances de l'ensemble de cette fusée, il est possible d'intervenir sur ses différents étages, pour aller vers l'infini et au delà !
Première optimisation possible, est de répartir la charge des 3 étages de la chaîne du service web, sur 3 serveurs. C'est coûteux, mais nécessaire pour les gros sites.
La seconde optimisation de la performance possible, est d'éviter la sollicitation de chaque étage de la fusée, pour avoir une réponse rapide.
Pour cela, on va utiliser des applications caches, qui vont stocker les éléments déjà générés, voici quelques exemples :
Nginx offre la possibilité de gérer un cache fastcgi, qui va stocker les pages html déjà générées par un backend Php ou un backend Ruby.
http {
fastcgi_cache_path /var/nginx
levels=1:2
keys_zone=mycache:10m
inactive=1h
max_size=4g;
...
location ~ \.php$ {
fastcgi_cache mycache;
fastcgi_cache_key $host$request_uri;
fastcgi_cache_valid any 1h;
fastcgi_cache_use_stale off;
...
Nginx a créé une arborescence de répertoires dans /var/nginx. Dans les répertoires, Nginx stocke les fichiers html. Ils sont conservés pendant la durée indiquée dans le fichier de configuration. Si votre backend fastcgi compresse en gzip, les fichiers stockés sont compressés, ce qui libère le serveur web pour d'autres taches !
Attention, pendant la phase de développement, pensez à désactiver le cache, sinon, vos modifications ne seront pas visibles !!!
Maintenant, on va encore optimiser le temps d'accès aux fichiers mis en cache, par la mise en cache sur un disque en RAM.