Tous les produits
Search
Centre de documentation

:Configurer une politique de mise en cache Apache

Dernière mise à jour :Aug 18, 2026

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.

Remarque

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 Cache-Control telles que no-store ou immutable.

Définition d'une durée de mise en cache simple (max-age) indiquant aux navigateurs ou au CDN la durée pendant laquelle un fichier doit être réutilisé.

mod_headers

Offre un contrôle total sur les en-têtes HTTP, prenant en charge toutes les directives Cache-Control, telles que immutable.

Sa syntaxe est plus complexe que celle de mod_expires.

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 -M ou httpd -M. Vérifiez que headers_module et expires_module figurent 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 lignes LoadModule ne 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/jpeg ou text/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 de modification (lorsque le fichier a été modifié pour la dernière fois).

  • time_unit : L'unité de temps, telle que :

    • seconds

    • minutes

    • hours

    • days

    • weeks

    • months

    • years

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-Control ou Expires.

  • value : La valeur à définir.

Présentation de <FilesMatch>

La directive <FilesMatch> fait correspondre les noms de fichiers ou les chemins à l'aide d'expressions régulières. Cela vous permet d'appliquer des règles de configuration spécifiques aux fichiers correspondants. Par exemple :

  • Définissez un long délai de mise en cache pour les fichiers image tels que .jpg ou .png.

  • Empêchez l'accès aux fichiers sensibles tels que .htaccess ou .log.

  • Ajoutez des en-têtes HTTP spécifiques pour les ressources statiques telles que les fichiers CSS et JS.

Syntaxe de base de <FilesMatch> :

<FilesMatch "regular_expression"> </FilesMatch>
  • regular_expression : Utilisé pour faire correspondre les noms de fichiers ou les chemins. Modèles de correspondance courants :

    • \.(extension)$ : Fait correspondre les fichiers avec une extension spécifique. Par exemple, \.(jpg|jpeg|png)$ fait correspondre tous les fichiers .jpg, .jpeg et .png.

    • ^/path/ : Fait correspondre les fichiers situés dans un chemin spécifique.

    • .* : Fait correspondre n'importe quel nom de fichier.

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 -t

    • Debian/Ubuntu : sudo apache2ctl -t

    Si la sortie est Syntax OK, vous pouvez continuer.

  • Appliquez la configuration (un rechargement gracieux est recommandé).

    Utilisez la commande reload pour appliquer la nouvelle configuration sans interrompre les connexions existantes.

    • CentOS/RHEL/Alibaba Cloud Linux : sudo systemctl reload httpd

    • Debian/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-age dans Cache-Control ou l'en-tête Expires), le navigateur charge la ressource depuis son cache local sans contacter le serveur. Le code d'état HTTP est généralement 200 (from disk cache) ou 200 (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 :

    1. Le navigateur envoie la requête avec des identifiants de cache dans ses en-têtes, tels que If-None-Match (avec la valeur ETag de la réponse précédente) ou If-Modified-Since (avec la date Last-Modified de la réponse précédente).

    2. Le serveur compare ces identifiants avec la version actuelle de la ressource.

    3. Si la ressource n'a pas changé, le serveur renvoie un code d'état HTTP 304 Not Modified avec un corps de réponse vide. Le navigateur continue alors d'utiliser sa copie locale obsolète.

    4. Si la ressource a été mise à jour, le serveur renvoie un code d'état HTTP 200 OK ainsi 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 :

En-têtes de réponse HTTP liés à la mise en cache

En-tête de réponse

Description

Directives/valeurs courantes

Cache-Control

Introduit dans HTTP/1,1 pour fournir un contrôle précis du comportement de mise en cache. Il est prioritaire sur Expires.

public : Peut être stocké par n'importe quel cache (navigateur, CDN).

private : Ne peut être mis en cache que par le navigateur de l'utilisateur final.

no-cache : Force la mise en cache négociée. Doit valider avec le serveur à chaque fois.

no-store : Désactive complètement la mise en cache. Ne stocke aucune copie.

max-age=<seconds> : Définit la période de validité pour la mise en cache forte en secondes.

s-maxage=<seconds> : Un max-age spécifiquement pour les caches partagés, tels qu'un CDN.

must-revalidate : Après l'expiration du cache, celui-ci doit être validé avec le serveur d'origine. Une copie obsolète ne peut pas être utilisée.

immutable : Indique que le corps de la réponse ne changera pas tant que le cache est frais. Cela permet au navigateur d'éviter d'envoyer une requête conditionnelle.

Expires

Une ancienne norme HTTP/1,0 qui fournit un horodatage d'expiration absolu. Cet en-tête est ignoré si Cache-Control: max-age est présent.

Expires: Wed, 21 Oct 2025 07:28:00 GMT

ETag

Un tag d'entité (ETag) est un identifiant unique généré par le serveur pour une ressource, tel qu'un hachage du contenu du fichier. Un ETag est plus précis que Last-Modified.

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Last-Modified

L'heure à laquelle la ressource a été modifiée pour la dernière fois sur le serveur. Elle est moins précise (précision à la seconde) et peut être inexacte dans certains scénarios, par exemple lorsque les métadonnées du fichier changent mais que le contenu reste identique.

Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT