La configuration d'une politique de mise en cache web dans Apache permet aux navigateurs et aux proxies intermédiaires, tels qu'un Content Delivery Network (CDN), de réutiliser les ressources téléchargées, ce qui réduit les requêtes réseau inutiles. Cela améliore la vitesse de chargement des pages tout en diminuant la charge du serveur et la consommation de bande passante.
Avertissement : Cette rubrique peut contenir des informations sur des produits tiers. Alibaba Cloud ne fait aucune déclaration ni ne donne aucune garantie concernant les performances ou la fiabilité des produits tiers. Vous êtes responsable de tout impact potentiel lié à l'utilisation de ces produits.
Choisir un module Apache
|
Module Apache |
Avantages |
Inconvénients |
Cas d'utilisation |
|
mod_expires |
Syntaxe simple. Définit rapidement les délais d'expiration pour différents types de fichiers. |
Fonctionnalités limitées. Impossible de définir directement les directives |
Définition d'une durée de mise en cache simple ( |
|
mod_headers |
Offre un contrôle total sur les en-têtes HTTP, prenant en charge toutes les directives |
Sa syntaxe est plus complexe que celle de |
Environnements de production nécessitant des stratégies de mise en cache fines et complètes. |
Procédure
Activer les modules
Avant de configurer une politique de mise en cache, assurez-vous que les modules headers et expires sont activés dans Apache.
Pour vérifier si les modules sont chargés, exécutez la commande
apachectl -Mouhttpd -M. Vérifiez queheaders_moduleetexpires_modulefigurent dans la liste de sortie.-
Activez les modules :
-
Pour Debian/Ubuntu :
sudo a2enmod headers expires sudo systemctl restart apache2 Pour CentOS/RHEL/Alibaba Cloud Linux : Ces modules sont généralement compilés ou chargés par défaut. S'ils sont manquants, vérifiez les fichiers de configuration dans le répertoire
/etc/httpd/conf.modules.d/. Assurez-vous que les lignesLoadModulene sont pas commentées.
-
Choisir l'emplacement du fichier de configuration
Vous pouvez stocker les configurations de mise en cache dans un seul fichier ou dans le bloc VirtualHost de votre site.
Recommandé : Créez un nouveau fichier, tel que
cache.conf, dans le répertoire/etc/httpd/conf.d/pour CentOS/RHEL ou dans le répertoire/etc/apache2/conf-available/pour Debian/Ubuntu.Non recommandé : Évitez de placer les configurations dans les fichiers
.htaccess. Comme Apache doit lire et analyser.htaccessà chaque requête, cela entraîne une surcharge de performance inutile.
Exemples de configuration
Définir un délai d'expiration de cache global par défaut
mod_expires
<IfModule mod_expires.c>
# Enable the mod_expires feature
ExpiresActive On
# Set the default cache time for all resources to 1 day
ExpiresDefault "access plus 1 day"
</IfModule>
mod_headers
<IfModule mod_headers.c>
# Set the Cache-Control header. The cache time is 1 day
Header set Cache-Control "max-age=86400, public"
</IfModule>
Définir des politiques de mise en cache par type de fichier
mod_expires
<IfModule mod_expires.c>
# Enable the mod_expires feature
ExpiresActive On
# Set the default cache time to 1 day
ExpiresDefault "access plus 1 day"
# Cache image resources for 1 month
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
# Cache CSS and JS files for 1 week
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>
mod_headers
<IfModule mod_headers.c>
# Cache image resources for 1 month
<FilesMatch "\.(jpg|jpeg|png|gif|svg)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
# Cache CSS and JS files for 1 week
<FilesMatch "\.(css|js)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
</IfModule>
Désactiver la mise en cache pour des types de ressources spécifiques
mod_expires
<IfModule mod_expires.c>
# Enable the mod_expires feature
ExpiresActive On
# Do not cache HTML files
ExpiresByType text/html "access plus 0 seconds"
</IfModule>
mod_headers
<IfModule mod_headers.c>
# Disable caching for HTML files
<FilesMatch "\.html$">
Header set Cache-Control "no-store, no-cache, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
</FilesMatch>
</IfModule>
Définir une politique de mise en cache personnalisée
Personnalisez une politique en utilisant les règles de syntaxe suivantes de mod_expires et mod_headers :
mod_expires
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "base_time plus time_unit"
ExpiresByType mime_type "base_time plus time_unit"
</IfModule>
ExpiresActive On : Active le module
mod_expires.ExpiresDefault : Définit le délai de mise en cache par défaut pour toutes les ressources dont le type n'est pas défini.
ExpiresByType : Définit le délai de mise en cache pour un type MIME (Multipurpose Internet Mail Extensions) spécifique.
mime_type: Décrit le format d'un fichier. Il comprend un type principal et un sous-type, séparés par une barre oblique, tels que
image/jpegoutext/html.base_time : L'heure de base pour la mise en cache. Il s'agit généralement de
access(lorsque l'utilisateur accède au fichier) ou demodification(lorsque le fichier a été modifié pour la dernière fois).-
time_unit : L'unité de temps, telle que :
secondsminuteshoursdaysweeksmonthsyears
mod_headers
<IfModule mod_headers.c>
Header set|append|unset header_name "value"
</IfModule>
Header set : Définit la valeur du champ d'en-tête HTTP spécifié.
Header append : Ajoute du contenu à la valeur existante.
Header unset : Supprime le champ d'en-tête HTTP spécifié.
header_name : Le nom du champ d'en-tête HTTP sur lequel opérer, tel que
Cache-ControlouExpires.value : La valeur à définir.
Valider et appliquer la configuration
Après avoir modifié la configuration, vérifiez la syntaxe puis rechargez le service en mode gracieux pour éviter les interruptions de service.
-
Vérifiez la syntaxe de la configuration. Avant d'appliquer les modifications, exécutez une commande de vérification de la syntaxe pour vous assurer qu'il n'y a aucune erreur.
CentOS/RHEL/Alibaba Cloud Linux :
sudo httpd -tDebian/Ubuntu :
sudo apache2ctl -t
Si la sortie est
Syntax OK, vous pouvez continuer. -
Appliquez la configuration (un rechargement gracieux est recommandé).
Utilisez la commande
reloadpour appliquer la nouvelle configuration sans interrompre les connexions existantes.CentOS/RHEL/Alibaba Cloud Linux :
sudo systemctl reload httpdDebian/Ubuntu :
sudo systemctl reload apache2
Référence : Fonctionnement de la mise en cache web
Comprendre la mise en cache web vous aide à configurer correctement Apache. La mise en cache web se divise en deux principaux types : la mise en cache forte et la mise en cache négociée :
Mise en cache forte : Lorsqu'un navigateur demande une ressource, il vérifie d'abord son cache local. Si le cache n'est pas expiré (déterminé par la directive
max-agedansCache-Controlou l'en-têteExpires), le navigateur charge la ressource depuis son cache local sans contacter le serveur. Le code d'état HTTP est généralement200 (from disk cache)ou200 (from memory cache). C'est la méthode de mise en cache la plus efficace.-
Mise en cache négociée : Lorsqu'un cache fort est invalide (expiré) ou non défini, le navigateur envoie une requête conditionnelle au serveur pour vérifier si sa version mise en cache est toujours valide. Ce processus implique les étapes suivantes :
Le navigateur envoie la requête avec des identifiants de cache dans ses en-têtes, tels que
If-None-Match(avec la valeurETagde la réponse précédente) ouIf-Modified-Since(avec la dateLast-Modifiedde la réponse précédente).Le serveur compare ces identifiants avec la version actuelle de la ressource.
Si la ressource n'a pas changé, le serveur renvoie un code d'état HTTP
304 Not Modifiedavec un corps de réponse vide. Le navigateur continue alors d'utiliser sa copie locale obsolète.Si la ressource a été mise à jour, le serveur renvoie un code d'état HTTP
200 OKainsi que le nouveau contenu de la ressource.
En configurant Apache, vous pouvez contrôler les en-têtes de réponse HTTP clés suivants pour votre politique de mise en cache :