Serveur HTTP Apache Version 2.5

Apache > Serveur HTTP > Documentation > Version 2.5 > Modules

# Module Apache mod_file_cache

Description: | Mise en cache mémoire d'une liste statique de fichiers
Statut: | Expérimental
Identificateur de Module: | file_cache_module
Fichier Source: | mod_file_cache.c

### Sommaire

Ce module doit être utilisé avec précautions. Il est recommandé de lire attentivement ce document, car une mauvaise utilisation de `mod_file_cache` peut facilement conduire à la création d'un site inopérant.

La mise en cache de fichiers souvent demandés mais rarement modifiés est une technique qui peut réduire la charge du serveur. `mod_file_cache` met en oeuvre deux techniques de mise en cache de fichiers statiques fréquemment demandés. Des directives de configuration vous permettent d'indiquer à `mod_file_cache` soit d'ouvrir et de charger une image en mémoire d'un fichier avec `mmap()`, soit de pré-ouvrir un fichier et de maintenir en service le gestionnaire du fichier. Chacune de ces techniques amène à réduire la charge du serveur lors du traitement des requêtes concernant ces fichiers, en accomplissant une partie du travail nécessaire à la mise à disposition de ces fichiers (en particulier les opérations d'entrées/sorties sur les fichiers) au démarrage du serveur, plutôt qu'au cours de chaque requête.

Note : ces techniques sont inutilisables pour accélérer des programmes CGI ou d'autres fichiers servis par des gestionnaires de contenu spéciaux. Elles ne peuvent être utilisées que pour des fichiers standards en général servis par le gestionnaire de contenu de base d'Apache.

Ce module est une extension et s'inspire fortement du module d'Apache 1.3 `mod_mmap_static`.

### Sujets

- Utilisation de mod_file_cache

### Directives

### Traitement des bugs

- Journal des modifications de httpd
- Problèmes connus
- Signaler un bug

## Utilisation de mod_file_cache ¶

`mod_file_cache` gère la mise en cache d'une liste de fichiers définie de manière statique via une des directives `MMapFile` ou `CacheFile` au niveau de la configuration du serveur principal.

Les deux directives ne sont pas supportées par toutes les plates-formes. Par exemple, Apache pour Windows ne supporte pas actuellement la directive `MMapFile`, alors que d'autres plates-formes, comme AIX, supportent les deux. Vous recevrez un message d'erreur dans le journal des erreurs du serveur si vous essayez d'utiliser une directive non supportée. Si vous utilisez une directive non supportée, le serveur démarrera, mais les fichiers ne seront pas mis en cache. Sur les plates-formes qui supportent les deux directives, vous devez faire des essais afin de déterminer quelle directive vous convient le mieux.

### Directive MMapFile

La directive `MMapFile` du module `mod_file_cache` permet de transférer en mémoire une liste statique de fichiers à l'aide de l'appel système `mmap()`. Cet appel système est disponible sur la plupart des plates-formes de style Unix, mais pas sur toutes. Il existe parfois des limites spécifiques au système quant à la taille et au nombre de fichiers qui peuvent être `mmap()`és, et l'expérimentation est probablement la méthode la plus simple pour déterminer ces limites.

Ce `mmap()`age n'est effectué qu'une seul fois au démarrage ou redémarrage du serveur. Ainsi, chaque fois qu'un des fichiers chargés en mémoire est modifié au niveau du système de fichiers, vous devez redémarrer le serveur (voir la documentation sur l'Arrêt et redémarrage). Pour bien insister sur ce point, si des fichiers sont modifiés sur disque, et si vous ne redémarrez pas le serveur, vous allez finir par servir des contenus complètement obsolètes. Vous devez mettre à jour les fichiers en renommant l'ancienne version et en enregistrant la nouvelle sur disque. Pour y parvenir, on peut utiliser des outils comme `rdist` et `mv`. La raison pour laquelle ce module ne prend pas en compte les modifications de fichiers réside dans le fait que cette vérification nécessiterait un appel à `stat()` à chaque accès, et en fin de compte, l'augmentation de la consommation de ressources finirait par aller contre le but initial de réduire les entrées/sorties.

### Directive CacheFile

La directive `CacheFile` du module `mod_file_cache` permet d'associer un gestionnaire ou descripteur de fichier à chaque fichier énuméré dans la directive de configuration et place ces gestionnaires de fichiers ouverts dans le cache. Lorsqu'un des fichier est demandé, le serveur sélectionne son gestionnaire dans le cache et le transmet à l'API `sendfile()` (ou `TransmitFile()` sous Windows).

Cette mise en cache des gestionnaire n'est effectuée qu'une seule fois au démarrage ou redémarrage du système. Ainsi, chaque fois qu'un des fichiers chargés en mémoire est modifié au niveau du système de fichiers, vous devez redémarrer le serveur (voir la documentation sur l'Arrêt et redémarrage). Pour bien insister sur ce point, si des fichiers sont modifiés sur disque, et si vous ne redémarrez pas le serveur, vous allez finir par servir des contenus complètement obsolètes. Vous devez mettre à jour les fichiers en renommant l'ancienne version et en enregistrant la nouvelle sur disque. Pour y parvenir, on peut utiliser des outils comme `rdist` et `mv`.

### Note

Ne cherchez pas de directive qui met tous les fichiers d'un répertoire en cache, de manière récursive. Pour y parvenir, vous pouvez vous reporter à la directive `Include`, et considérer cette commande :

`find /www/htdocs -type f -print \
| sed -e 's/.*/mmapfile &/' > /www/conf/mmap.conf`

## Directive CacheFile ¶

Description: | Met en cache une liste de gestionnaires de fichiers au démarrage
Syntaxe: | `CacheFile chemin_fichier [chemin fichier] ...`
Contexte: | configuration globale
Statut: | Expérimental
Module: | mod_file_cache

La directive `CacheFile` associe des gestionnaires à un ou plusieurs fichiers (séparés par des espaces), et place ceux-ci dans le cache au démarrage du serveur. Les gestionnaires des fichiers mis en cache sont automatiquement fermés à l'arrêt du serveur. Lorsqu'un ou plusieurs fichiers ont été modifiés sur disque, le serveur doit être redémarré afin que les modifications soient prises en compte par le cache.

Soyez prudent avec les arguments chemin_fichier : ils doivent correspondre exactement au chemin du système de fichier que créent les gestionnaires de traduction URL-vers-nom-fichier d'Apache. On ne peut pas comparer des inodes ou autres identifiants pour mettre en correspondance des chemins à l'aide de liens symboliques (etc...), car là encore, ceci nécessiterait un appel à `stat()` supplémentaire, ce qui est inacceptable. Il n'est pas garanti que ce module fonctionne avec des noms de fichiers réécrits par `mod_alias` ou `mod_rewrite`.

### Exemple

    CacheFile /usr/local/apache/htdocs/index.html

## Directive MMapFile ¶

Description: | Charge au démarrage une liste de fichiers en mémoire
Syntaxe: | `MMapFile chemin fichier [chemin_fichier] ...`
Contexte: | configuration globale
Statut: | Expérimental
Module: | mod_file_cache

La directive `MMapFile` provoque le chargement d'un ou plusieurs fichiers (séparés par des espaces) en mémoire au démarrage du serveur. Ceux-ci sont automatiquement déchargés de la mémoire à l'arrêt du serveur. Lorsqu'un ou plusieurs fichiers ont été modifiés sur disque, on doit au minimum envoyer un signal `HUP` ou `USR1` au serveur afin de les re`mmap()`er.

Soyez prudent avec les arguments chemin_fichier : ils doivent correspondre exactement au chemin du système de fichier que créent les gestionnaires de traduction URL-vers-nom-fichier d'Apache. On ne peut pas comparer des inodes ou autres identifiants pour mettre en correspondance des chemins à l'aide de liens symboliques (etc...), car là encore, ceci nécessiterait un appel à `stat()` supplémentaire, ce qui est inacceptable. Il n'est pas garanti que ce module fonctionne avec des noms de fichiers réécrits par `mod_alias` ou `mod_rewrite`.

### Exemple

    MMapFile /usr/local/apache/htdocs/index.html