caching.html.fr revision 8e9c6d6438af1ccb46adaa60d34caa3ac98f3851
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>Guide de la mise en cache - Serveur Apache HTTP</title>
<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="/images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="/faq/">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p>
<p class="apache">Serveur Apache HTTP Version 2.3</p>
<img alt="" src="/images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.3</a></div><div id="page-content"><div id="preamble"><h1>Guide de la mise en cache</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="/en/caching.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="/fr/caching.html" title="Fran�ais">&nbsp;fr&nbsp;</a> |
<a href="/tr/caching.html" hreflang="tr" rel="alternate" title="T�rk�e">&nbsp;tr&nbsp;</a></p>
</div>
<p>Ce document compl�te la documentation de r�f�rence des modules
<code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>, <code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code>,
<code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code> et du programme <a href="programs/htcacheclean.html">htcacheclean</a>.
Il d�crit l'utilisation des fonctionnalit�s de mise en
cache du serveur HTTP Apache
pour acc�l�rer les services web et proxy, tout en �vitant les probl�mes
courants et les erreurs de configuration.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#introduction">Introduction</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#overview">Vue d'ensemble de la mise en cache</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#security">Consid�rations sur la s�curit�</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#filehandle">Mise en cache de la gestion de fichier</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#inmemory">Mise en cache en m�moire</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#disk">Mise en cache sur disque</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="introduction" id="introduction">Introduction</a></h2>
<p>Depuis la version 2.2 du serveur HTTP Apache, les modules
<code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>
et <code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code> ne sont plus jug�s exp�rimentaux
et on consid�re qu'ils peuvent �tre utilis�s en production. Ces
architectures de mise en cache constituent un puissant concept
d'acc�l�ration de la gestion HTTP, tant comme serveur web originel
que comme mandataire.</p>
<p>Le module <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> et son module de soutien
<code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code>
permettent une mise en cache intelligente du point de vue HTTP.
Le contenu proprement dit est stock� dans le cache,
et mod_cache tente d'honorer tous les en-t�tes HTTP et les options
qui d�finissent la possibilit� de mise en cache du contenu. Il g�re non
seulement le contenu local, mais aussi le contenu mandat�.
<code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>
est con�u pour des configurations de mise en cache simples ou complexes,
dans lesquels vous traitez de contenu mandat�, de contenu local dynamique
ou avez besoin d'acc�l�rer l'acc�s � des fichiers locaux qui sont modifi�s
au cours du temps.</p>
<p>Le module <code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code> quant � lui, constitue une
forme de mise en cache plus basique, mais quelques fois int�ressante.
Plut�t que de g�rer la complexit� de s'assurer de mani�re active de la
possibilit� de mise en cache d'URLs,
<code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code> fournit des m�thodes pour la gestion
et l'�dition de fichiers en m�moire afin de maintenir un cache de fichiers
dans l'�tat o� ils �taient la derni�re
fois qu'httpd a d�marr�.
En tant que tel, <code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code> a �t� con�u pour am�liorer
le temps d'acc�s � des fichiers locaux statiques qui ne sont modifi�s
que rarement.</p>
<p>Etant donn� que <code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code> constitue une
impl�mentation de mise en cache relativement simple, mises � part les
sections sp�cifiques sur les directives <code class="directive"><a href="/mod/mod_file_cache.html#cachefile">CacheFile</a></code> et <code class="directive"><a href="/mod/mod_file_cache.html#mmapfile">MMapFile</a></code>, les explications fournies
dans ce guide concernent l'architecture de mise en cache du
module <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>.</p>
<p>Pour tirer parti efficacement de ce document, les bases de HTTP doivent
vous �tre famili�res, et vous devez avoir lu les sections
<a href="urlmapping.html">Mise en correspondance des
URLs avec le syst�me de fichiers</a> et
<a href="content-negotiation.html">N�gociation sur le contenu</a>
du guide de l'utilisateur.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="overview" id="overview">Vue d'ensemble de la mise en cache</a></h2>
<table class="related"><tr><th>Modules Apparent�s</th><th>Directives Apparent�es</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code></li><li><code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code></li><li><code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_cache.html#cacheenable">CacheEnable</a></code></li><li><code class="directive"><a href="/mod/mod_cache.html#cachedisable">CacheDisable</a></code></li><li><code class="directive"><a href="/mod/mod_file_cache.html#cachefile">CacheFile</a></code></li><li><code class="directive"><a href="/mod/mod_file_cache.html#mmapfile">MMapFile</a></code></li><li><code class="directive"><a href="/mod/core.html#usecanonicalname">UseCanonicalName</a></code></li><li><code class="directive"><a href="/mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code></li></ul></td></tr></table>
<p><code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> peut faire intervenir deux phases
principales pendant la dur�e de vie d'une requ�te.
En premier lieu, <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>
est un module de mise en correspondance d'URLs, ce qui signifie que si
une URL a �t� mise en cache, et que la version du cache de cette URL n'est
pas arriv�e � expiration, la requ�te sera trait�e directement par
<code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>.</p>
<p>Ceci entra�ne que toutes autres actions qui se d�rouleraient normalement
au cours du processus de traitement d'une requ�te -- par exemple un
traitement effectu� par <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code>, ou
<code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> --
ne seront pas effectu�es. Mais c'est justement l'int�r�t
de la mise en cache pr�alable du contenu.</p>
<p>Si l'URL ne se trouve pas dans le cache, <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>
va ajouter un <a href="filter.html">filtre</a> au traitement de la requ�te.
Une fois le contenu localis� par httpd selon la conception courante, le
filtre sera ex�cut� en m�me temps que le contenu sera servi.
S'il est d�termin� que le contenu peut �tre mis en cache,
il sera sauvegard� dans le cache pour une utilisation future.</p>
<p>Si l'URL se trouve dans le cache, mais est arriv�e � expiration,
le filtre est quand-m�me ajout�, mais <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> va cr�er
une requ�te conditionnelle en arri�re-plan, pour d�terminer si la version
du cache est encore � jour. Si la version du cache est encore � jour, ses
meta-informations seront mises � jour et la requ�te sera servie � partir du
cache. Si la version du contenu n'est plus � jour, elle sera supprim�e et le
filtre va sauvegarder le contenu mis � jour dans le cache
au moment o� il sera servi.</p>
<h3>Am�lioration du taux de pr�sence dans le cache</h3>
<p>Lors de la mise en cache de contenu g�n�r� localement, le
positionnement de la directive
<code class="directive"><a href="/mod/core.html#usecanonicalname">UseCanonicalName</a></code> �
<code>On</code> peut am�liorer de mani�re spectaculaire le taux de
pr�sence dans le cache. Ceci est du au fait que le nom d'h�te de l'h�te
virtuel qui sert le contenu constitue une partie de la cl� de cache.
Avec <code class="directive"><a href="/mod/core.html#usecanonicalname">UseCanonicalName</a></code> positionn�e
� <code>On</code>,
les h�tes virtuels poss�dant plusieurs noms de serveur ou alias ne
g�n�reront pas d'entit�s de cache diff�rentes, et le contenu sera mis en
cache en faisant r�f�rence au nom d'h�te canonique.</p>
<p>Les documents mis en cache ne seront servis qu'en r�ponse � des
requ�tes de type URL, car la mise en cache est effectu�e lors de la phase
de traduction de l'URL en nom de fichier.
En g�n�ral, cela n'a que peu d'effet, � moins que vous n'utilisiez les
<a href="howto/ssi.html">Inclusions C�t� Serveur (SSI)</a>;</p>
<div class="example"><p><code>
&lt;!-- L'inclusion suivante peut �tre mise en cache --&gt;<br />
&lt;!--#include virtual="/footer.html" --&gt;<br />
<br />
&lt;!-- L'inclusion suivante ne peut pas �tre mise en cache --&gt;<br />
&lt;!--#include file="/path/to/footer.html" --&gt; <br />
</code></p></div>
<p>Si vous utilisez les SSI, et voulez b�n�ficier de la vitesse de
service depuis le cache, vous devez utiliser des inclusions de type
<code>virtual</code>.</p>
<h3>P�riodes d'expiration</h3>
<p>La p�riode d'expiration par d�faut pour les entit�s du cache est
d'une heure; elle peut cependant �tre facilement modifi�e � l'aide de
la directive <code class="directive"><a href="/mod/mod_cache.html#cachedefaultexpire">CacheDefaultExpire</a></code>. Cette valeur par
d�faut n'est utilis�e que lorsque la source originale du contenu ne
pr�cise pas de p�riode d'expiration ou d'heure de derni�re
modification.</p>
<p>Si une r�ponse ne contient pas d'en-t�te <code>Expires</code> mais
inclut un en-t�te <code>Last-Modified</code>, <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>
peut d�duire une p�riode d'expiration en se basant sur la valeur de la
directive <code class="directive"><a href="/mod/mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></code>.</p>
<p>La p�riode d'expiration des contenus locaux peut �tre ajust�e finement
en utilisant le module <code class="module"><a href="/mod/mod_expires.html">mod_expires</a></code>.</p>
<p>On peut aussi contr�ler la p�riode d'expiration maximale en utilisant
la directive <code class="directive"><a href="/mod/mod_cache.html#cachemaxexpire">CacheMaxExpire</a></code>.</p>
<h3>Guide succinct des requ�tes conditionnelles</h3>
<p>Lorsqu'un contenu est arriv� � expiration dans le cache et fait
l'objet d'une nouvelle demande d'acc�s, plut�t que traiter directement
la requ�te originale, httpd pr�f�re utiliser une
requ�te conditionnelle.</p>
<p>HTTP propose toute une panoplie d'en-t�tes qui permettent � un client,
ou au cache de distinguer les diff�rentes versions d'un m�me contenu. Par
exemple, si une ressource a �t� servie avec un en-t�te "Etag:", il est
possible de cr�er une requ�te conditionnelle contenant un en-t�te
"If-None-Match:". Si une ressource a �t� servie avec un en-t�te
"Last-Modified:", il est possible de cr�er une requ�te conditionnelle
contenant un en-t�te "If-Modified-Since:", etc....</p>
<p>Lorsqu'une telle requ�te conditionnelle est cr��e, la reponse diff�re
selon que le contenu satisfait ou non aux conditions. Si une requ�te est
cr��e avec un en-t�te "If-Modified-Since:", et le contenu n'a pas �t�
modifi� depuis le moment indiqu� dans la requ�te, alors un laconique
"304 Not Modified" est retourn�.</p>
<p>Si le contenu a �t� modifi�, il est servi comme si la requ�te n'avait
pas �t� conditionnelle � l'origine.</p>
<p>Les b�n�fices des requ�tes conditionnelles pour ce qui concerne la
mise en cache sont de deux sortes. Premi�rement, quand une telle requ�te
est envoy�e au processus en arri�re-plan, il sera ais� de d�terminer
si le contenu que devra servir le processus en arri�re-plan correspond
au contenu stock� dans le cache, sans �tre oblig� de transmettre la
totalit� de la ressource.</p>
<p>Deuxi�mement, les requ�tes conditionnelles sont en g�n�ral moins
co�teuses en ressources pour le processus en arri�re-plan.
Pour ce qui est des fichiers
statiques, l'action type est un appel � <code>stat()</code> ou un appel
syst�me similaire, pour d�terminer si la taille du fichier ou sa date de
modification ont chang�. Ainsi, m�me si httpd met en cache le contenu
local, un contenu arriv� � expiration pourra �tre servi plus rapidement
depuis le cache s'il n'a pas �t� modifi�, parce que la lecture depuis le
cache est plus rapide que la lecture depuis le processus en arri�re-plan
(� comparer � la diff�rence de vitesse entre la lecture depuis un cache en
m�moire avec <code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code> et la lecture depuis un disque).</p>
<h3>Que peut-on mettre en cache ?</h3>
<p>Comme mentionn� plus haut, les deux styles de mise en
cache de httpd
fonctionnent diff�remment; la mise en cache de
<code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code> conserve les contenus des fichiers
tels qu'ils �taient au d�marrage de httpd. Quand une requ�te pour un
fichier mis en cache par ce module est envoy�e, elle est intercept�e
et le fichier mis en cache est servi.</p>
<p>La mise en cache de <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>, quant � elle, est
plus complexe. Lors du traitement d'une requ�te, le module de mise en
cache d�terminera si le contenu peut �tre mis en cache, s'il ne l'a
pas d�j� �t� auparavant. Les conditions qui permettent de d�terminer
la possibilit� de mise en cache d'une r�ponse sont :</p>
<ol>
<li>La mise en cache doit �tre activ�e pour cette URL. Voir les
directives <code class="directive"><a href="/mod/mod_cache.html#cacheenable">CacheEnable</a></code> et <code class="directive"><a href="/mod/mod_cache.html#cachedisable">CacheDisable</a></code>.</li>
<li>La reponse doit avoir un code de statut HTTP de 200, 203, 300, 301
ou 410.</li>
<li>La requ�te doit �tre de type HTTP GET.</li>
<li>Si la requ�te contient un en-t�te "Authorization:", la r�ponse ne
sera pas mise en cache.</li>
<li>Si la r�ponse contient un en-t�te "Authorization:", elle doit aussi
contenir une option "s-maxage", "must-revalidate" ou "public"
dans l'en-t�te "Cache-Control:".</li>
<li>Si l'URL contient une cha�ne de requ�te
(provenant par exemple d'une m�thode GET de formulaire HTML), elle ne
sera pas mise en cache, � moins que la r�ponse ne
sp�cifie explicitement un d�lai d'expiration via un
en-t�te "Expires:" ou une directive max-age ou s-maxage de
l'en-t�te "Cache-Control:" comme indiqu� dans les
sections 13.2.1. et 13.9 de la RFC2616.</li>
<li>Si la r�ponse a un statut de 200 (OK), elle doit aussi contenir
au moins un des en-t�tes "Etag", "Last-Modified" ou
"Expires", ou une directive max-age ou s-maxage de
l'en-t�te "Cache-Control:", � moins que la directive
<code class="directive"><a href="/mod/mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></code>
ne pr�cise d'autres contraintes.</li>
<li>Si la r�ponse contient l'option "private" dans un en-t�te
"Cache-Control:", elle ne sera pas mise en cache � moins que la
directive
<code class="directive"><a href="/mod/mod_cache.html#cachestoreprivate">CacheStorePrivate</a></code>
ne pr�cise d'autres contraintes.</li>
<li>De m�me, si la r�ponse contient l'option "no-store" dans un en-t�te
"Cache-Control:", elle ne sera pas mise en cache � moins que la
directive
<code class="directive"><a href="/mod/mod_cache.html#cachestorenostore">CacheStoreNoStore</a></code>
n'ait �t� utilis�e.</li>
<li>Une r�ponse ne sera pas mise en cache si elle comporte un en-t�te
"Vary:" contenant le caract�re "*" qui correspond � toute
cha�ne de caract�res.</li>
</ol>
<h3>Qu'est ce qui ne doit pas �tre mis en cache ?</h3>
<p>En bref, tout contenu qui varie beaucoup avec le temps, ou en fonction
de particularit�s de la requ�te qui ne sont pas couvertes par la
n�gociation HTTP, ne doit pas �tre mis en cache.</p>
<p>Un contenu dynamique qui varie en fonction de l'adresse IP du
demandeur, ou est modifi� toutes les 5 minutes, ne devra en g�n�ral
pas �tre mis en cache.</p>
<p>Si par contre le contenu servi diff�re en fonction de la valeur de
divers en-t�tes HTTP, il se peut que l'on puisse le mettre en cache
intelligemment en utilisant un en-t�te "Vary".</p>
<h3>Contenu variable et/ou n�goci�</h3>
<p>Si <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> re�oit une r�ponse contenant un en-t�te
"Vary", lorsqu'un contenu a �t� demand� par un processus d'arri�re-plan,
il va s'efforcer de la traiter intelligemment. Si possible,
<code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> va d�tecter les en-t�tes attribu�s dans la
r�ponse "Vary" � l'occasion des futures demandes, et servir une r�ponse
correcte � partir du cache.</p>
<p>Si par exemple, une r�ponse est re�ue avec l'en-t�te Vary suivant,</p>
<div class="example"><p><code>
Vary: negotiate,accept-language,accept-charset
</code></p></div>
<p><code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> ne servira aux demandeurs que le contenu
mis en cache qui correspond au contenu des en-t�tes accept-language et
accept-charset de la requ�te originale.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="security" id="security">Consid�rations sur la s�curit�</a></h2>
<h3>Autorisation et contr�le d'acc�s</h3>
<p>Utiliser <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> revient sensiblement � la m�me
chose qu'avoir un mandataire inverse int�gr� (reverse-proxy). Les requ�tes
seront servies par le module de mise en cache sauf si ce dernier
d�termine qu'un processus d'arri�re-plan doit �tre appel�. La mise en
cache de ressources locales modifie consid�rablement le mod�le de
s�curit� de httpd.</p>
<p>Comme le parcours de la hi�rarchie d'un syst�me de fichiers pour
examiner le contenu d'�ventuels fichiers
<code>.htaccess</code> serait une op�ration tr�s co�teuse en ressources,
annulant partiellement de ce fait l'int�r�t de la mise en cache
(acc�l�rer le traitement des requ�tes),
<code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> ne se pr�occupe pas de savoir s'il a
l'autorisation de servir une entit� mise en cache. En d'autres termes,
si <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> a mis en cache un certain contenu, ce
dernier sera servi � partir du cache tant qu'il ne sera pas arriv� �
expiration.</p>
<p>Si par exemple, votre configuration autorise l'acc�s � une ressource
en fonction de l'adresse IP, vous devez vous assurer que ce contenu n'est
pas mis en cache. Ceci est possible en utilisant la directive
<code class="directive"><a href="/mod/mod_cache.html#cachedisable">CacheDisable</a></code>, ou le module
<code class="module"><a href="/mod/mod_expires.html">mod_expires</a></code>. Livr� � lui-m�me,
<code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> - pratiquement comme un mandataire inverse -
mettrait en cache le contenu lors de son service, et le servirait ensuite
� tout client, vers n'importe quelle adresse IP.</p>
<h3>Piratages locaux</h3>
<p>Etant donn� que les requ�tes des utilisateurs finaux peuvent �tre
servies depuis le cache, ce dernier est une cible potentielle pour ceux
qui veulent d�figurer un contenu ou interf�rer avec lui. Il est important
de garder � l'esprit que l'utilisateur sous lequel tourne
httpd doit
toujours avoir l'acc�s en �criture dans le cache. Ceci est en contraste
total avec la recommandation usuelle d'interdire � l'utilisateur sous
lequel tourne Apache
l'acc�s en �criture � tout contenu.</p>
<p>Si l'utilisateur sous lequel tourne Apache est compromis,
par exemple � cause d'une
faille de s�curit� dans un processus CGI, il est possible que le cache
fasse l'objet d'une attaque. Il est relativement ais� d'ins�rer ou de
modifier une entit� dans le cache en utilisant le module
<code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code>.</p>
<p>Cela repr�sente un risque relativement �l�v� par rapport aux autres
types d'attaques qu'il est possible de mener sous l'utilisateur apache.
Si vous utilisez <code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code>, vous devez garder ceci
� l'esprit : effectuez toujours les mises � jour de
httpdquand des
correctifs de s�curit� sont annonc�s et ex�cutez les processus CGI sous
un utilisateur autre qu'apache en utilisant
<a href="suexec.html">suEXEC</a> dans la mesure du possible.</p>
<h3>Empoisonnement du cache (Cache Poisoning)</h3>
<p>Si vous utilisez httpd comme serveur mandataire avec mise en cache,
vous vous exposez aussi � un �ventuel "Empoisonnement du
cache" (Cache poisoning). L'empoisonnement du cache est un terme g�n�ral
pour d�signer les attaques au cours desquelles l'attaquant fait en sorte
que le serveur mandataire renvoie � un contenu incorrect (et souvent
ind�sirable) suite � en provenance du serveur d'arri�re-plan.
</p>
<p>Par exemple, si les serveur DNS qu'utilise votre syst�me o� tourne
httpd sont vuln�rables � l'empoisonnement du cache des DNS, un attaquant
pourra contr�ler vers o� httpd se connecte lorsqu'il demande un contenu
depuis le serveur d'origine.
Un autre exemple est constitu� par les attaques ainsi nomm�es
"Dissimulation de requ�tes HTTP" (HTTP request-smuggling).</p>
<p>Ce document n'est pas le bon endroit pour une discussion approfondie
� propos de la Dissimulation de requ�tes HTTP (utilisez plut�t votre
moteur de recherche favori); il est cependant important de savoir qu'il
est possible d'�laborer une s�rie de requ�tes, et d'exploiter une
vuln�rabilit� d'un serveur web d'origine de telle fa�on que l'attaquant
puisse contr�ler enti�rement le contenu renvoy� par le mandataire.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="filehandle" id="filehandle">Mise en cache de la gestion de fichier</a></h2>
<table class="related"><tr><th>Modules Apparent�s</th><th>Directives Apparent�es</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_file_cache.html#cachefile">CacheFile</a></code></li></ul></td></tr></table>
<p>Le fait d'ouvrir un fichier peut en lui-m�me introduire un d�lai,
en particulier dans les syst�mes de fichiers r�partis
sur le r�seau. httpd
peut s'affranchir de ce d�lai en maintenant
un cache des descripteurs de fichiers
ouverts pour ce qui concerne les fichiers souvent
acc�d�s. httpd propose
actuellement une impl�mentation de mise en cache de la
gestion de fichier.</p>
<h3>Directive CacheFile</h3>
<p>La forme la plus �l�mentaire de mise en cache que
propose httpd est
fournie par le module <code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code>.
Plut�t que de mettre en cache le contenu des fichiers, ce cache maintient
une table des descripteurs de fichiers ouverts. Les fichiers � mettre en
cache de cette mani�re sont sp�cifi�s dans le fichier de configuration
en utilisant la directive
<code class="directive"><a href="/mod/mod_file_cache.html#cachefile">CacheFile</a></code>.</p>
<p>La directive
<code class="directive"><a href="/mod/mod_file_cache.html#cachefile">CacheFile</a></code> demande
� httpd
d'ouvrir le fichier lors de son d�marrage et de r�utiliser le descripteur
de fichier �labor� � cette occasion pour tous les
acc�s ult�rieurs � ce fichier.</p>
<div class="example"><p><code>
CacheFile /usr/local/apache2/htdocs/index.html
</code></p></div>
<p>Si vous avez l'intention de mettre en cache un grand nombre de
fichiers de cette mani�re, vous devez vous assurer que le nombre maximum
de fichiers ouverts par votre syst�me d'exploitation est correctement
d�fini.</p>
<p>Bien que l'utilisation de la directive
<code class="directive"><a href="/mod/mod_file_cache.html#cachefile">CacheFile</a></code>
n'entra�ne pas la mise en cache du contenu du fichier, cela ne signifie
pas qu'en cas de modification du fichier pendant
l'ex�cution de httpd,
ces changements seront pris en compte. Le fichier sera toujours servi
dans l'�tat o� il �tait quand httpd a d�marr�.</p>
<p>Si le fichier est supprim� pendant l'ex�cution de
httpd, ce dernier
continuera � maintenir un descripteur de fichier ouvert et � servir le
fichier dans l'�tat o� il �tait quand httpd a d�marr�. Cela signifie
aussi habituellement que malgr� le fait que le fichier ait �t� supprim�,
et ne soit
plus accessible par le syst�me de fichiers, l'espace lib�r� ne sera
restitu� qu'� l'arr�t de httpd quand le
descripteur de fichier sera ferm�.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="inmemory" id="inmemory">Mise en cache en m�moire</a></h2>
<table class="related"><tr><th>Modules Apparent�s</th><th>Directives Apparent�es</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_cache.html#cacheenable">CacheEnable</a></code></li><li><code class="directive"><a href="/mod/mod_cache.html#cachedisable">CacheDisable</a></code></li><li><code class="directive"><a href="/mod/mod_file_cache.html#mmapfile">MMapFile</a></code></li></ul></td></tr></table>
<p>Servir un contenu directement depuis la m�moire syst�me est
universellement reconnu comme la m�thode la plus rapide. Lire des fichiers
depuis un contr�leur de disque ou pire, depuis un r�seau distant est plus
lent de plusieurs ordres de grandeur. Les contr�leurs de disque r�alisent
en g�n�ral des op�rations m�caniques, et l'acc�s au r�seau est limit� par la
bande passante dont vous disposez. Par contre, les temps d'acc�s � la
m�moire sont de l'ordre de la nano-seconde.</p>
<p>Cependant la m�moire syst�me n'est pas bon march�; � capacit� �gale,
c'est de loin le type de stockage le plus co�teux et il est important de
s'assurer qu'elle est utilis�e efficacement. Le fait de mettre en cache
des fichiers en m�moire diminue d'autant la quantit� de m�moire syst�me
disponible. Comme nous le verrons plus loin, ce n'est pas un probl�me en
soi dans le cas de la mise en cache par l'interm�diaire du syst�me
d'exploitation, mais si l'on utilise la mise en cache en m�moire propre �
httpd, il faut prendre garde � ne pas allouer trop de m�moire au cache.
Sinon le syst�me sera contraint d'utiliser le swap, ce qui d�gradera
sensiblement les performances.</p>
<h3>Mise en cache par l'interm�diaire du syst�me d'exploitation</h3>
<p>Dans la plupart des syst�mes d'exploitation modernes, c'est le noyau
qui g�re directement la mise en cache en m�moire des donn�es relatives
aux fichiers. C'est une fonctionnalit� puissante, et les syst�mes
d'exploitation s'en acquittent fort bien pour la plus grande partie.
Consid�rons par exemple, dans le cas de Linux, la diff�rence entre le
temps n�cessaire � la premi�re lecture d'un fichier et le temps
n�cessaire � sa deuxi�me lecture;</p>
<div class="example"><pre>
colm@coroebus:~$ time cat testfile &gt; /dev/null
real 0m0.065s
user 0m0.000s
sys 0m0.001s
colm@coroebus:~$ time cat testfile &gt; /dev/null
real 0m0.003s
user 0m0.003s
sys 0m0.000s</pre></div>
<p>M�me pour ce petit fichier, il y a une grande diff�rence entre les
temps n�cessaires pour lire le fichier. Ceci est du au fait que le
noyau a mis en cache le contenu du fichier en m�moire.</p>
<p>Du fait de toujours pouvoir disposer de m�moire syst�me, vous pouvez
�tre assur� qu'il y aura de plus en plus de contenus de fichiers stock�s
dans ce cache. Ceci peut s'av�rer une m�thode de mise en cache en m�moire
tr�s efficace, et ne n�cessite aucune configuration suppl�mentaire
de httpd.</p>
<p>De plus, comme le syst�me d'exploitation sait si des fichiers
ont �t�
supprim�s ou modifi�s, il peut effacer automatiquement des contenus de
fichiers du cache lorsque cela s'av�re n�cessaire. Ceci constitue un gros
avantage par rapport � la mise en cache en m�moire
de httpd qui n'a
aucune possibilit� de savoir si un fichier a �t� modifi�.</p>
<p>En d�pit des performances et des avantages de la mise en cache
automatique par le syst�me d'exploitation, la mise en cache en m�moire
peut �tre effectu�e plus efficacement par httpd dans certaines
circonstances.</p>
<h3>Mise en cache � l'aide de la directive MMapFile</h3>
<p>La directive <code class="directive"><a href="/mod/mod_file_cache.html#mmapfile">MMapFile</a></code>
fournie par le module <code class="module"><a href="/mod/mod_file_cache.html">mod_file_cache</a></code> vous permet de
demander � httpd de charger un contenu de fichier statique en m�moire
lors de son d�marrage (� l'aide de l'appel
syst�me mmap). httpd
utilisera le contenu charg� en m�moire pour satisfaire ult�rieurement
toutes les demandes d'acc�s � ce fichier.</p>
<div class="example"><p><code>
MMapFile /usr/local/apache2/htdocs/index.html
</code></p></div>
<p>Comme dans le cas de la directive
<code class="directive"><a href="/mod/mod_file_cache.html#cachefile">CacheFile</a></code>, toute
modification du fichier ne sera plus prise en compte par httpd une fois
ce dernier d�marr�.</p>
<p> La directive
<code class="directive"><a href="/mod/mod_file_cache.html#mmapfile">MMapFile</a></code> ne gardant
pas la trace de la quantit� de m�moire qu'elle alloue, vous devez prendre
garde de ne pas en abuser. Chaque processus enfant de httpd utilisant
sa propre r�plique de la m�moire allou�e, il est donc d'une importance
critique de s'assurer que les fichiers charg�s ne sont pas d'une taille
trop importante afin d'�pargner au syst�me l'utilisation du swap.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="disk" id="disk">Mise en cache sur disque</a></h2>
<table class="related"><tr><th>Modules Apparent�s</th><th>Directives Apparent�es</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_cache.html#cacheenable">CacheEnable</a></code></li><li><code class="directive"><a href="/mod/mod_cache.html#cachedisable">CacheDisable</a></code></li></ul></td></tr></table>
<p>Le module <code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code> fournit un m�canisme de mise
en cache sur disque au module <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>. Cette mise en cache est
intelligente et le contenu ne sera servi qu'� partir du cache tant qu'il
sera consid�r� comme valide.</p>
<p>Typiquement, le module sera configur� comme suit :</p>
<div class="example"><p><code>
CacheRoot /var/cache/apache/<br />
CacheEnable disk /<br />
CacheDirLevels 2<br />
CacheDirLength 1
</code></p></div>
<p>Il est important de savoir que, les fichiers mis en cache �tant stock�s
localement, la mise en cache par l'interm�diaire du syst�me d'exploitation
sera en g�n�ral aussi appliqu�e � leurs acc�s. Si bien que m�me si les
fichiers sont stock�s sur disque, s'il font l'objet d'acc�s fr�quents,
il est probable que le syst�me d'exploitation s'appliquera � ce qu'ils
soient servis � partir de la m�moire.</p>
<h3>Comprendre le stockage dans le cache</h3>
<p>Pour stocker des entit�s dans le cache,
le module <code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code> cr�e une empreinte (hash) de 22
caract�res de l'URL qui a fait l'objet d'une requ�te. Cette empreinte
comprend le nom d'h�te, le protocole, le port, le chemin et tout argument
de type CGI associ� � l'URL, afin d'�tre sur que plusieurs URLs
n'interf�rent pas entre elles.</p>
<p>Chaque position de l'empreinte peut contenir un caract�re
choisi parmi 64 caract�res diff�rents, il y a donc
64^22 possibilit�s pour une empreinte. Par exemple, une URL peut poss�der
l'empreinte <code>xyTGxSMO2b68mBCykqkp1w</code>. Cette empreinte est
utilis�e pour pr�fixer les noms de fichiers sp�cifiques � cette URL �
l'int�rieur du cache; cependant, elle est tout d'abord plac�e dans les
r�pertoires du cache selon les directives
<code class="directive"><a href="/mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code> et
<code class="directive"><a href="/mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code>.</p>
<p>La directive
<code class="directive"><a href="/mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code>
d�finit le nombre de niveaux de sous-r�pertoires, et
<code class="directive"><a href="/mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code>
le nombre de caract�res composant le nom des sous-r�pertoires. Dans
l'exemple donn� plus haut, l'empreinte se trouvera � :
<code>/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w</code>.</p>
<p>Cette technique a pour but principal de r�duire le nombre de
sous-r�pertoires ou de fichiers contenus dans un r�pertoire particulier,
car le fonctionnement de la plupart des syst�mes de fichiers est ralenti
quand ce nombre augmente. Avec la valeur "1" pour la directive
<code class="directive"><a href="/mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code>,
il peut y avoir au plus 64 sous-r�pertoires � un niveau quelconque.
Avec la valeur "2", il peut y en avoir 64 * 64, etc...
A moins d'avoir une bonne raison pour ne pas le faire, l'utilisation de
la valeur "1" pour la directive
<code class="directive"><a href="/mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code>
est recommand�e.</p>
<p>Le param�trage de la directive
<code class="directive"><a href="/mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code>
d�pend du nombre de fichiers que vous pensez stocker dans le cache.
Avec une valeur de "2" comme dans l'exemple donn� plus haut,
4096 sous-r�pertoires peuvent �tre cr��s au total. Avec 1 million de
fichiers dans le cache, cela �quivaut � environ 245 URLs mises en cache
dans chaque r�pertoire.</p>
<p>Chaque URL n�cessite au moins deux fichiers dans le cache. Ce sont en
g�n�ral un fichier ".header", qui contient des meta-informations � propos
de l'URL, comme la date de son arriv�e � expiration,
et un fichier ".data" qui est la copie exacte du contenu � servir.</p>
<p>Dans le cas d'un contenu n�goci� via l'en-t�te "Vary", un r�pertoire
".vary" sera cr�� pour l'URL en question. Ce r�pertoire contiendra de
multiples fichiers ".data" correspondant aux diff�rents contenus
n�goci�s.</p>
<h3>Maintenance du cache sur disque</h3>
<p>Bien que le module <code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code> supprime un contenu
du cache lorsqu'il est arriv� � expiration, il ne maintient aucune
information � propos de la taille totale du cache ou de l'espace restant
disponible.</p>
<p>Par contre l'utilitaire
<a href="programs/htcacheclean.html">htcacheclean</a> fourni avec
httpd
vous permet, comme son nom l'indique, de nettoyer le cache p�riodiquement.
D�terminer la fr�quence � laquelle lancer <a href="programs/htcacheclean.html">htcacheclean</a> et la taille souhait�e
pour le cache est une t�che relativement complexe et il vous faudra de
nombreux essais et erreurs pour arriver � s�lectionner des valeurs
optimales.</p>
<p><a href="programs/htcacheclean.html">htcacheclean</a> op�re selon deux
modes. Il peut s'ex�cuter comme d�mon r�sident, ou �tre lanc�
p�riodiquement par cron. <a href="programs/htcacheclean.html">htcacheclean</a> peut mettre une heure
ou plus pour traiter de tr�s grands caches (plusieurs dizaines de
Gigaoctets) et si vous l'ex�cutez � partir de cron, il vous est
conseill� de d�terminer la dur�e typique d'un traitement, afin d'�viter
d'ex�cuter plusieurs instances � la fois.</p>
<p class="figure">
<img src="images/caching_fig1.gif" alt="" width="600" height="406" /><br />
<a id="figure1" name="figure1"><dfn>Figure 1</dfn></a>: Croissance
typique du cache / s�quence de nettoyage.</p>
<p>Comme <code class="module"><a href="/mod/mod_cache_disk.html">mod_cache_disk</a></code> ne tient pas compte de l'espace
utilis� dans le cache, vous devez vous assurer que
<a href="programs/htcacheclean.html">htcacheclean</a> est configur� de
fa�on � laisser suffisamment d'"espace de croissance"
� la suite d'un nettoyage.</p>
</div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="/en/caching.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="/fr/caching.html" title="Fran�ais">&nbsp;fr&nbsp;</a> |
<a href="/tr/caching.html" hreflang="tr" rel="alternate" title="T�rk�e">&nbsp;tr&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2011 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="/faq/">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p></div>
</body></html>