
Accélérez vos sites web et réduisez la charge du serveur avec mod_expires
Étant une agence drupal qui fournit un support Drupal, nous traitons beaucoup de performances. Dans cet article, je discuterai d'un réglage simple qui augmente considérablement le temps de chargement des sites web avec des images.
Sur Debian, Apache installé à partir des dépôts a mod_expires désactivé par défaut. Cela augmente sérieusement la charge du serveur.
Alors, que fait mod_expires ? Il "contrôle le réglage de l'en-tête HTTP Expires et la directive max-age de l'en-tête HTTP Cache-Control"...
Laissez-moi vous expliquer.
Le module permet à Apache d'informer les clients (par exemple, votre navigateur) de la durée pendant laquelle un actif particulier peut être considéré comme valide.
Drupal 7 dans son .htaccess contient ces lignes
Par exemple :
<IfModule mod_expires.c>
# Activer les expirations.
ExpiresActive On
# Mettre en cache tous les fichiers pendant 2 semaines après l'accès (A).
ExpiresDefault A1209600
<FilesMatch \.php$>
ExpiresActive Off
</FilesMatch>
</IfModule>
Ce morceau de code (si vous avez activé mod_expires) informe tous les clients que les fichiers qui ne sont pas des fichiers *.php sont valides pendant 2 semaines.
Si votre navigateur récupère une image d'un serveur une fois, il la gardera dans son cache et la servira depuis la mémoire pendant 2 semaines, au lieu de la récupérer du serveur à chaque fois que vous chargez une page.
Le plus grand gain est généralement réalisé sur les images. Toutes les images du modèle de votre site web et toutes les images de contenu ne sont demandées qu'une fois toutes les 2 semaines. Sur un site web avec 10 images, un utilisateur qui visite la page tous les 3 jours fait un total de 10 requêtes au lieu de 50 pendant ces 2 semaines. En supposant qu'il visite 3 pages à chaque visite, vous pourriez vous épargner 140 demandes à Apache. 14 fois moins de requêtes!!!
Sans mod_expires, Varnish sous-performe
Si vous n'avez pas activé mod_expires, le vernis sous-performe sérieusement sur votre serveur.
Dans la configuration de performance de votre site Drupal (admin/config/development/performance), vous pouvez définir l'expiration du cache pour les pages mises en cache. Cela fonctionne cependant uniquement pour la page (HTML et pour les fichiers css/js).
Les requêtes pour les images sont des requêtes distinctes et si mod_expires est désactivé, la directive max-age ni l'en-tête EXPIRES ne sont définis sur ces fichiers. Varnish les traite comme des fichiers qui ne sont valides qu'une seule requête et ne les met pas en cache. Chaque demande est transmise à Apache.
Revenons à notre exemple, si nous avons un site web avec 10 ressources graphiques, qui est derrière Varnish, si vous avez désactivé mod_expires, un utilisateur qui visite fera :
- min 2 requêtes à Varnish (page et fichier CSS) - en-têtes définis par Drupal
- 10 requêtes pour récupérer les images
Si vous activez mod_expires, les 12 requêtes peuvent être servies par Varnish, sans même toucher vos disques durs.
Grâce à mod_expires, votre taux de réussite de Varnish s'améliorera significativement et vos disques durs dureront beaucoup plus longtemps.
Alors, avez-vous activé mod_expires ?
Sinon, alors :
sudo a2enmod mod_expires sudo service apache2 reload