]> granicus.if.org Git - apache/blob - docs/manual/caching.html.fr
update transformation
[apache] / docs / manual / caching.html.fr
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>Guide de la mise en cache - Serveur Apache HTTP</title>
9 <link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
12 <link href="./images/favicon.ico" rel="shortcut icon" /></head>
13 <body id="manual-page"><div id="page-header">
14 <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>
15 <p class="apache">Serveur Apache HTTP Version 2.3</p>
16 <img alt="" src="./images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
18 <div id="path">
19 <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>
20 <div class="toplang">
21 <p><span>Langues Disponibles: </span><a href="./en/caching.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
22 <a href="./fr/caching.html" title="Français">&nbsp;fr&nbsp;</a> |
23 <a href="./tr/caching.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
24 </div>
25
26     <p>Ce document complète la documentation de référence des modules
27     <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>, <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>,
28     <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>.
29     Il décrit l'utilisation des fonctionnalités de mise en cache d'Apache
30     pour accélérer les services web et proxy, tout en évitant les problèmes
31     courants et les erreurs de configuration.</p>
32   </div>
33 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">Introduction</a></li>
34 <li><img alt="" src="./images/down.gif" /> <a href="#overview">Vue d'ensemble de la mise en cache</a></li>
35 <li><img alt="" src="./images/down.gif" /> <a href="#security">Considérations sur la sécurité</a></li>
36 <li><img alt="" src="./images/down.gif" /> <a href="#filehandle">Mise en cache de la gestion de fichier</a></li>
37 <li><img alt="" src="./images/down.gif" /> <a href="#inmemory">Mise en cache en mémoire</a></li>
38 <li><img alt="" src="./images/down.gif" /> <a href="#disk">Mise en cache sur disque</a></li>
39 </ul></div>
40 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
41 <div class="section">
42 <h2><a name="introduction" id="introduction">Introduction</a></h2>
43     
44
45     <p>Depuis la version 2.2 du serveur HTTP Apache, les modules
46     <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
47     et <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> ne sont plus jugés expérimentaux
48     et on considère qu'ils peuvent être utilisés en production. Ces
49     architectures de mise en cache constituent un puissant concept
50     d'accélération de la gestion HTTP, tant comme serveur web originel
51     que comme mandataire.</p>
52
53     <p>Le module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> et son module de soutien
54     <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>
55     permettent une mise en cache intelligente du point de vue HTTP.
56     Le contenu proprement dit est stocké dans le cache,
57     et mod_cache tente d'honorer tous les en-têtes HTTP et les options
58     qui définissent la possibilité de mise en cache du contenu. Il gère non
59     seulement le contenu local, mais aussi le contenu mandaté.
60     <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
61     est conçu pour des configurations de mise en cache simples ou complexes,
62     dans lesquels vous traitez de contenu mandaté, de contenu local dynamique
63     ou avez besoin d'accélérer l'accès à des fichiers locaux qui sont modifiés
64     au cours du temps.</p>
65
66     <p>Le module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> quant à lui, constitue une
67     forme de mise en cache plus basique, mais quelques fois intéressante.
68     Plutôt que de gérer la complexité de s'assurer de manière active de la
69     possibilité de mise en cache d'URLs,
70     <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> fournit des méthodes pour la gestion
71     et l'édition de fichiers en mémoire afin de maintenir un cache de fichiers
72     dans l'état où ils étaient la dernière fois qu'Apache a démarré.
73     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
74     le temps d'accès à des fichiers locaux statiques qui ne sont modifiés
75     que rarement.</p>
76
77     <p>Etant donné que <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> constitue une
78     implémentation de mise en cache relativement simple, mises à part les
79     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
80     dans ce guide concernent l'architecture de mise en cache du
81     module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>.</p>
82
83     <p>Pour tirer parti efficacement de ce document, les bases de HTTP doivent
84     vous être familières, et vous devez avoir lu les sections
85     <a href="urlmapping.html">Mise en correspondance des
86     URLs avec le système de fichiers</a> et
87     <a href="content-negotiation.html">Négociation sur le contenu</a>
88     du guide de l'utilisateur.</p>
89
90   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
91 <div class="section">
92 <h2><a name="overview" id="overview">Vue d'ensemble de la mise en cache</a></h2>
93
94     
95
96     <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_disk_cache.html">mod_disk_cache</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>
97
98     <p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> peut faire intervenir deux phases
99     principales pendant la durée de vie d'une requête.
100     En premier lieu, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
101     est un module de mise en correspondance d'URLs, ce qui signifie que si
102     une URL a été mise en cache, et que la version du cache de cette URL n'est
103     pas arrivée à expiration, la requête sera traitée directement par
104     <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>.</p>
105
106     <p>Ceci entraîne que toutes autres actions qui se dérouleraient normalement
107     au cours du processus de traitement d'une requête -- par exemple un
108     traitement effectué par <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>, ou
109     <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> --
110     ne seront pas effectuées.  Mais c'est justement l'intérêt
111     de la mise en cache préalable du contenu.</p>
112
113     <p>Si l'URL ne se trouve pas dans le cache, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
114     va ajouter un <a href="filter.html">filtre</a> au traitement de la requête.
115     Une fois le contenu localisé par Apache selon la conception courante, le
116     filtre sera exécuté en même temps que le contenu sera servi.
117     S'il est déterminé que le contenu peut être mis en cache,
118     il sera sauvegardé dans le cache pour une utilisation future.</p>
119
120     <p>Si l'URL se trouve dans le cache, mais est arrivée à expiration,
121     le filtre est quand-même ajouté, mais <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> va créer
122     une requête conditionnelle en arrière-plan, pour déterminer si la version
123     du cache est encore à jour. Si la version du cache est encore à jour, ses
124     meta-informations seront mises à jour et la requête sera servie à partir du
125     cache. Si la version du contenu n'est plus à jour, elle sera supprimée et le
126     filtre va sauvegarder le contenu mis à jour dans le cache
127     au moment où il sera servi.</p>
128
129     <h3>Amélioration du taux de présence dans le cache</h3>
130       
131
132       <p>Lors de la mise en cache de contenu généré localement, le
133       positionnement de la directive
134       <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code> à
135       <code>On</code> peut améliorer de manière spectaculaire le taux de
136       présence dans le cache. Ceci est du au fait que le nom d'hôte de l'hôte
137       virtuel qui sert le contenu constitue une partie de la clé de cache.
138       Avec <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code> positionnée
139       à <code>On</code>,
140       les hôtes virtuels possédant plusieurs noms de serveur ou alias ne
141       généreront pas d'entités de cache différentes, et le contenu sera mis en
142       cache en faisant référence au nom d'hôte canonique.</p>
143
144       <p>Les documents mis en cache ne seront servis qu'en réponse à des
145       requêtes de type URL, car la mise en cache est effectuée lors de la phase
146       de traduction de l'URL en nom de fichier.
147       En général, cela n'a que peu d'effet, à moins que vous n'utilisiez les
148       <a href="howto/ssi.html">Inclusions Côté Serveur (SSI)</a>;</p>
149
150       <div class="example"><pre>
151 &lt;!-- L'inclusion suivante peut être mise en cache --&gt;
152 &lt;!--#include virtual="/footer.html" --&gt;
153
154 &lt;!-- L'inclusion suivante ne peut pas être mise en cache --&gt;
155 &lt;!--#include file="/path/to/footer.html" --&gt;</pre></div>
156
157       <p>Si vous utilisez les SSI, et voulez bénéficier de la vitesse de
158       service depuis le cache, vous devez utiliser des inclusions de type
159       <code>virtual</code>.</p>
160     
161
162     <h3>Périodes d'expiration</h3>
163       
164
165       <p>La période d'expiration par défaut pour les entités du cache est
166       d'une heure; elle peut cependant être facilement modifiée à l'aide de
167       la directive <code class="directive"><a href="./mod/mod_cache.html#cachedefaultexpire">CacheDefaultExpire</a></code>. Cette valeur par
168       défaut n'est utilisée que lorsque la source originale du contenu ne
169       précise pas de période d'expiration ou d'heure de dernière
170       modification.</p>
171
172       <p>Si une réponse ne contient pas d'en-tête <code>Expires</code> mais
173       inclut un en-tête <code>Last-Modified</code>, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
174       peut déduire une période d'expiration en se basant sur la valeur de la
175       directive <code class="directive"><a href="./mod/mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></code>.</p>
176
177       <p>La période d'expiration des contenus locaux peut être ajustée finement
178       en utilisant le module <code class="module"><a href="./mod/mod_expires.html">mod_expires</a></code>.</p>
179
180       <p>On peut aussi contrôler la période d'expiration maximale en utilisant
181       la directive <code class="directive"><a href="./mod/mod_cache.html#cachemaxexpire">CacheMaxExpire</a></code>.</p>
182
183     
184
185     <h3>Guide succinct des requêtes conditionnelles</h3>
186       
187
188       <p>Lorsqu'un contenu est arrivé à expiration dans le cache et fait
189       l'objet d'une nouvelle demande d'accès, plutôt que traiter directement
190       la requête originale, Apache préfère utiliser une
191       requête conditionnelle.</p>
192
193       <p>HTTP propose toute une panoplie d'en-têtes qui permettent à un client,
194       ou au cache de distinguer les différentes versions d'un même contenu. Par
195       exemple, si une ressource a été servie avec un en-tête "Etag:", il est
196       possible de créer une requête conditionnelle contenant un en-tête
197       "If-None-Match:". Si une ressource a été servie avec un en-tête
198       "Last-Modified:", il est possible de créer une requête conditionnelle
199       contenant un en-tête "If-Modified-Since:", etc....</p>
200
201       <p>Lorsqu'une telle requête conditionnelle est créée, la reponse diffère
202       selon que le contenu satisfait ou non aux conditions. Si une requête est
203       créée avec un en-tête "If-Modified-Since:", et le contenu n'a pas été
204       modifié depuis le moment indiqué dans la requête, alors un laconique
205       "304 Not Modified" est retourné.</p>
206
207       <p>Si le contenu a été modifié, il est servi comme si la requête n'avait
208       pas été conditionnelle à l'origine.</p>
209
210       <p>Les bénéfices des requêtes conditionnelles pour ce qui concerne la
211       mise en cache sont de deux sortes. Premièrement, quand une telle requête
212       est envoyée au processus en arrière-plan, il sera aisé de déterminer
213       si le contenu que devra servir le processus en arrière-plan correspond
214       au contenu stocké dans le cache, sans être obligé de transmettre la
215       totalité de la ressource.</p>
216
217       <p>Deuxièmement, les requêtes conditionnelles sont en général moins
218       coûteuses en ressources pour le processus en arrière-plan.
219       Pour ce qui est des fichiers
220       statiques, l'action type est un appel à <code>stat()</code> ou un appel
221       système similaire, pour déterminer si la taille du fichier ou sa date de
222       modification ont changé. Ainsi, même si Apache met en cache le contenu
223       local, un contenu arrivé à expiration pourra être servi plus rapidement
224       depuis le cache s'il n'a pas été modifié, parce que la lecture depuis le
225       cache est plus rapide que la lecture depuis le processus en arrière-plan
226       (à comparer à la différence de vitesse entre la lecture depuis un cache en
227       mémoire avec <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> et la lecture depuis un disque).</p>
228     
229
230     <h3>Que peut-on mettre en cache ?</h3>
231       
232
233       <p>Comme mentionné plus haut, les deux styles de mise en cache d'Apache
234       fonctionnent différemment; la mise en cache de
235       <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> conserve les contenus des fichiers
236       tels qu'ils étaient au démarrage d'Apache. Quand une requête pour un
237       fichier mis en cache par ce module est envoyée, elle est interceptée
238       et le fichier mis en cache est servi.</p>
239
240       <p>La mise en cache de <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>, quant à elle, est
241       plus complexe. Lors du traitement d'une requête, le module de mise en
242       cache déterminera si le contenu peut être mis en cache, s'il ne l'a
243       pas déjà été auparavant. Les conditions qui permettent de déterminer
244       la possibilité de mise en cache d'une réponse sont :</p>
245
246       <ol>
247         <li>La mise en cache doit être activée pour cette URL. Voir les
248         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>
249
250         <li>La reponse doit avoir un code de statut HTTP de 200, 203, 300, 301
251         ou 410.</li>
252
253         <li>La requête doit être de type HTTP GET.</li>
254
255         <li>Si la requête contient un en-tête "Authorization:", la réponse ne
256         sera pas mise en cache.</li>
257
258         <li>Si la réponse contient un en-tête "Authorization:", elle doit aussi
259         contenir une option "s-maxage", "must-revalidate" ou "public"
260         dans l'en-tête "Cache-Control:".</li>
261
262         <li>Si l'URL contenait une requête sous forme de chaîne de caractères
263         (provenant par exemple d'une méthode GET de formulaire HTML), elle ne
264         sera pas mise en cache à moins que la réponse ne contienne un en-tête
265         "Expires:", comme précisé dans la RFC2616 section 13.9.</li>
266
267         <li>Si la réponse a un statut de 200 (OK), elle doit aussi contenir
268         au moins un des en-têtes "Etag", "Last-Modified" ou
269         "Expires", à moins que la directive
270         <code class="directive"><a href="./mod/mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></code>
271         ne précise d'autres contraintes.</li>
272
273         <li>Si la réponse contient l'option "private" dans un en-tête
274         "Cache-Control:", elle ne sera pas mise en cache à moins que la
275         directive
276         <code class="directive"><a href="./mod/mod_cache.html#cachestoreprivate">CacheStorePrivate</a></code>
277         ne précise d'autres contraintes.</li>
278
279         <li>De même, si la réponse contient l'option "no-store" dans un en-tête
280         "Cache-Control:", elle ne sera pas mise en cache à moins que la
281         directive
282         <code class="directive"><a href="./mod/mod_cache.html#cachestorenostore">CacheStoreNoStore</a></code>
283         n'ait été utilisée.</li>
284
285         <li>Une réponse ne sera pas mise en cache si elle comporte un en-tête
286         "Vary:" contenant le caractère "*" qui correspond à toute
287         chaîne de caractères.</li>
288       </ol>
289     
290
291     <h3>Qu'est ce qui ne doit pas être mis en cache ?</h3>
292       
293
294       <p>En bref, tout contenu qui varie beaucoup avec le temps, ou en fonction
295       de particularités de la requête qui ne sont pas couvertes par la
296       négociation HTTP, ne doit pas être mis en cache.</p>
297
298       <p>Un contenu dynamique qui varie en fonction de l'adresse IP du
299       demandeur, ou est modifié toutes les 5 minutes, ne devra en général
300       pas être mis en cache.</p>
301
302       <p>Si par contre le contenu servi diffère en fonction de la valeur de
303       divers en-têtes HTTP, il se peut que l'on puisse le mettre en cache
304       intelligemment en utilisant un en-tête "Vary".</p>
305     
306
307     <h3>Contenu variable et/ou négocié</h3>
308       
309
310       <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
311       "Vary", lorsqu'un contenu a été demandé par un processus d'arrière-plan,
312       il va s'efforcer de la traiter intelligemment. Si possible,
313       <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> va détecter les en-têtes attribués dans la
314       réponse "Vary" à l'occasion des futures demandes, et servir une réponse
315       correcte à partir du cache.</p>
316
317       <p>Si par exemple, une réponse est reçue avec l'en-tête Vary suivant,</p>
318
319       <div class="example"><p><code>
320 Vary: negotiate,accept-language,accept-charset
321       </code></p></div>
322
323       <p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ne servira aux demandeurs que le contenu
324       mis en cache qui correspond au contenu des en-têtes accept-language et
325       accept-charset de la requête originale.</p>
326     
327
328   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
329 <div class="section">
330 <h2><a name="security" id="security">Considérations sur la sécurité</a></h2>
331     
332
333     <h3>Autorisation et contrôle d'accès</h3>
334       
335
336       <p>Utiliser <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> revient sensiblement à la même
337       chose qu'avoir un mandataire inverse intégré (reverse-proxy). Les requêtes
338       seront servies par le module de mise en cache sauf si ce dernier
339       détermine qu'un processus d'arrière-plan doit être appelé. La mise en
340       cache de ressources locales modifie considérablement le modèle de
341       sécurité d'Apache.</p>
342
343       <p>Comme le parcours de la hiérarchie d'un système de fichiers pour
344       examiner le contenu d'éventuels fichiers
345       <code>.htaccess</code> serait une opération très coûteuse en ressources,
346       annulant partiellement de ce fait l'intérêt de la mise en cache
347       (accélérer le traitement des requêtes),
348       <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ne se préoccupe pas de savoir s'il a
349       l'autorisation de servir une entité mise en cache. En d'autres termes,
350       si <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> a mis en cache un certain contenu, ce
351       dernier sera servi à partir du cache tant qu'il ne sera pas arrivé à
352       expiration.</p>
353
354       <p>Si par exemple, votre configuration autorise l'accès à une ressource
355       en fonction de l'adresse IP, vous devez vous assurer que ce contenu n'est
356       pas mis en cache. Ceci est possible en utilisant la directive
357       <code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code>, ou le module
358       <code class="module"><a href="./mod/mod_expires.html">mod_expires</a></code>. Livré à lui-même,
359       <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> - pratiquement comme un mandataire inverse -
360       mettrait en cache le contenu lors de son service, et le servirait ensuite
361       à tout client, vers n'importe quelle adresse IP.</p>
362     
363
364     <h3>Piratages locaux</h3>
365       
366
367       <p>Etant donné que les requêtes des utilisateurs finaux peuvent être
368       servies depuis le cache, ce dernier est une cible potentielle pour ceux
369       qui veulent défigurer un contenu ou interférer avec lui. Il est important
370       de garder à l'esprit que l'utilisateur sous lequel tourne Apache doit
371       toujours avoir l'accès en écriture dans le cache. Ceci est en contraste
372       total avec la recommandation usuelle d'interdire à l'utilisateur sous
373       lequel tourne Apache
374       l'accès en écriture à tout contenu.</p>
375
376       <p>Si l'utilisateur sous lequel tourne Apache est compromis,
377       par exemple à cause d'une
378       faille de sécurité dans un processus CGI, il est possible que le cache
379       fasse l'objet d'une attaque. Il est relativement aisé d'insérer ou de
380       modifier une entité dans le cache en utilisant le module
381       <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>.</p>
382
383       <p>Cela représente un risque relativement élévé par rapport aux autres
384       types d'attaques qu'il est possible de mener sous l'utilisateur apache.
385       Si vous utilisez <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>, vous devez garder ceci
386       à l'esprit : effectuez toujours les mises à jour d'Apache quand des
387       correctifs de sécurité sont annoncés et exécutez les processus CGI sous
388       un utilisateur autre qu'apache en utilisant
389       <a href="suexec.html">suEXEC</a> dans la mesure du possible.</p>
390
391     
392
393     <h3>Empoisonnement du cache (Cache Poisoning)</h3>
394       
395
396       <p>Si vous utilisez Apache comme serveur mandataire avec mise en cache,
397       vous vous exposez aussi à un éventuel "Empoisonnement du
398       cache" (Cache poisoning). L'empoisonnement du cache est un terme général
399       pour désigner les attaques au cours desquelles l'attaquant fait en sorte
400       que le serveur mandataire renvoie à un contenu incorrect (et souvent
401       indésirable) suite à en provenance du serveur d'arrière-plan.
402       </p>
403
404       <p>Par exemple, si les serveur DNS qu'utilise votre système où tourne
405       Apache sont vulnérables à l'empoisonnement du cache des DNS, un attaquant
406       pourra contrôler vers où Apache se connecte lorsqu'il demande un contenu
407       depuis le serveur d'origine.
408       Un autre exemple est constitué par les attaques ainsi nommées
409       "Dissimulation de requêtes HTTP" (HTTP request-smuggling).</p>
410
411       <p>Ce document n'est pas le bon endroit pour une discussion approfondie
412       à propos de la Dissimulation de requêtes HTTP (utilisez plutôt votre
413       moteur de recherche favori); il est cependant important de savoir qu'il
414       est possible d'élaborer une série de requêtes, et d'exploiter une
415       vulnérabilité d'un serveur web d'origine de telle façon que l'attaquant
416       puisse contrôler entièrement le contenu renvoyé par le mandataire.</p>
417     
418   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
419 <div class="section">
420 <h2><a name="filehandle" id="filehandle">Mise en cache de la gestion de fichier</a></h2>
421     
422
423     <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>
424
425     <p>Le fait d'ouvrir un fichier peut en lui-même introduire un délai,
426     en particulier dans les systèmes de fichiers répartis sur le réseau. Apache
427     peut s'affranchir de ce délai en maintenant
428     un cache des descripteurs de fichiers
429     ouverts pour ce qui concerne les fichiers souvent accédés. Apache propose
430     actuellement une implémentation de mise en cache de la
431     gestion de fichier.</p>
432
433     <h3>Directive CacheFile</h3>
434       
435
436       <p>La forme la plus élémentaire de mise en cache que propose Apache est
437       fournie par le module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code>.
438       Plutôt que de mettre en cache le contenu des fichiers, ce cache maintient
439       une table des descripteurs de fichiers ouverts. Les fichiers à mettre en
440       cache de cette manière sont spécifiés dans le fichier de configuration
441       en utilisant la directive
442       <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>.</p>
443
444       <p>La directive
445       <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code> demande à Apache
446       d'ouvrir le fichier lors de son démarrage et de réutiliser le descripteur
447       de fichier élaboré à cette occasion pour tous les
448       accès ultérieurs à ce fichier.</p>
449
450       <div class="example"><pre>CacheFile /usr/local/apache2/htdocs/index.html</pre></div>
451
452       <p>Si vous avez l'intention de mettre en cache un grand nombre de
453       fichiers de cette manière, vous devez vous assurer que le nombre maximum
454       de fichiers ouverts par votre système d'exploitation est correctement
455       défini.</p>
456
457       <p>Bien que l'utilisation de la directive
458       <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>
459       n'entraîne pas la mise en cache du contenu du fichier, cela ne signifie
460       pas qu'en cas de modification du fichier pendant l'exécution d'Apache,
461       ces changements seront pris en compte. Le fichier sera toujours servi
462       dans l'état où il était quand Apache a démarré.</p>
463
464       <p>Si le fichier est supprimé pendant l'exécution d'Apache, ce dernier
465       continuera à maintenir un descripteur de fichier ouvert et à servir le
466       fichier dans l'état où il était quand Apache a démarré. Cela signifie
467       aussi habituellement que malgré le fait que le fichier ait été supprimé,
468       et ne soit
469       plus accessible par le système de fichiers, l'espace libéré ne sera
470       restitué qu'à l'arrêt d'Apache quand le
471       descripteur de fichier sera fermé.</p>
472     
473
474     
475   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
476 <div class="section">
477 <h2><a name="inmemory" id="inmemory">Mise en cache en mémoire</a></h2>
478     
479
480      <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>
481
482     <p>Servir un contenu directement depuis la mémoire système est
483     universellement reconnu comme la méthode la plus rapide. Lire des fichiers
484     depuis un contrôleur de disque ou pire, depuis un réseau distant est plus
485     lent de plusieurs ordres de grandeur. Les contrôleurs de disque réalisent
486     en général des opérations mécaniques, et l'accès au réseau est limité par la
487     bande passante dont vous disposez. Par contre, les temps d'accès à la
488     mémoire sont de l'ordre de la nano-seconde.</p>
489
490     <p>Cependant la mémoire système n'est pas bon marché; à capacité égale,
491     c'est de loin le type de stockage le plus coûteux et il est important de
492     s'assurer qu'elle est utilisée efficacement. Le fait de mettre en cache
493     des fichiers en mémoire diminue d'autant la quantité de mémoire système
494     disponible. Comme nous le verrons plus loin, ce n'est pas un problème en
495     soi dans le cas de la mise en cache par l'intermédiaire du système
496     d'exploitation, mais si l'on utilise la mise en cache en mémoire propre à
497     Apache, il faut prendre garde à ne pas allouer trop de mémoire au cache.
498     Sinon le système sera contraint d'utiliser le swap, ce qui dégradera
499     sensiblement les performances.</p>
500
501     <h3>Mise en cache par l'intermédiaire du système d'exploitation</h3>
502       
503
504       <p>Dans la plupart des systèmes d'exploitation modernes, c'est le noyau
505       qui gère directement la mise en cache en mémoire des données relatives
506       aux fichiers. C'est une fonctionnalité puissante, et les systèmes
507       d'exploitation s'en acquittent fort bien pour la plus grande partie.
508       Considérons par exemple, dans le cas de Linux, la différence entre le
509       temps nécessaire à la première lecture d'un fichier et le temps
510       nécessaire à sa deuxième lecture;</p>
511
512       <div class="example"><pre>
513 colm@coroebus:~$ time cat testfile &gt; /dev/null
514 real    0m0.065s
515 user    0m0.000s
516 sys     0m0.001s
517 colm@coroebus:~$ time cat testfile &gt; /dev/null
518 real    0m0.003s
519 user    0m0.003s
520 sys     0m0.000s</pre></div>
521
522       <p>Même pour ce petit fichier, il y a une grande différence entre les
523       temps nécessaires pour lire le fichier. Ceci est du au fait que le
524       noyau a mis en cache le contenu du fichier en mémoire.</p>
525
526       <p>Du fait de toujours pouvoir disposer de mémoire système, vous pouvez
527       être assuré qu'il y aura de plus en plus de contenus de fichiers stockés
528       dans ce cache. Ceci peut s'avérer une méthode de mise en cache en mémoire
529       très efficace, et ne nécessite aucune configuration supplémentaire
530       d'Apache.</p>
531
532       <p>De plus, comme le système d'exploitation sait si des fichiers
533       ont été
534       supprimés ou modifiés, il peut effacer automatiquement des contenus de
535       fichiers du cache lorsque cela s'avère nécessaire. Ceci constitue un gros
536       avantage par rapport à la mise en cache en mémoire d'Apache qui n'a
537       aucune possibilité de savoir si un fichier a été modifié.</p>
538     
539
540     <p>En dépit des performances et des avantages de la mise en cache
541     automatique par le système d'exploitation, la mise en cache en mémoire
542     peut être effectuée plus efficacement par Apache dans certaines
543     circonstances.</p>
544
545     <h3>Mise en cache à l'aide de la directive MMapFile</h3>
546       
547
548       <p>La directive <code class="directive"><a href="./mod/mod_file_cache.html#mmapfile">MMapFile</a></code>
549       fournie par le module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> vous permet de
550       demander à Apache de charger un contenu de fichier statique en mémoire
551       lors de son démarrage (à l'aide de l'appel système mmap). Apache
552       utilisera le contenu chargé en mémoire pour satisfaire ultérieurement
553       toutes les demandes d'accès à ce fichier.</p>
554
555       <div class="example"><pre>MMapFile /usr/local/apache2/htdocs/index.html</pre></div>
556
557       <p>Comme dans le cas de la directive
558       <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>, toute
559       modification du fichier ne sera plus prise en compte par Apache une fois
560       ce dernier démarré.</p>
561
562       <p> La directive
563       <code class="directive"><a href="./mod/mod_file_cache.html#mmapfile">MMapFile</a></code> ne gardant
564       pas la trace de la quantité de mémoire qu'elle alloue, vous devez prendre
565       garde de ne pas en abuser. Chaque processus enfant d'Apache utilisant
566       sa propre réplique de la mémoire allouée, il est donc d'une importance
567       critique de s'assurer que les fichiers chargés ne sont pas d'une taille
568       trop importante afin d'épargner au système l'utilisation du swap.</p>
569     
570
571     
572   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
573 <div class="section">
574 <h2><a name="disk" id="disk">Mise en cache sur disque</a></h2>
575     
576
577      <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_disk_cache.html">mod_disk_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></ul></td></tr></table>
578
579     <p>Le module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> fournit un mécanisme de mise
580     en cache sur disque au module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>. Cette mise en cache est
581     intelligente et le contenu ne sera servi qu'à partir du cache tant qu'il
582     sera considéré comme valide.</p>
583
584     <p>Typiquement, le module sera configuré comme suit :</p>
585
586     <div class="example"><pre>
587 CacheRoot   /var/cache/apache/
588 CacheEnable disk /
589 CacheDirLevels 2
590 CacheDirLength 1</pre></div>
591
592     <p>Il est important de savoir que, les fichiers mis en cache étant stockés
593     localement, la mise en cache par l'intermédiaire du système d'exploitation
594     sera en général aussi appliquée à leurs accès. Si bien que même si les
595     fichiers sont stockés sur disque, s'il font l'objet d'accès fréquents,
596     il est probable que le système d'exploitation s'appliquera à ce qu'ils
597     soient servis à partir de la mémoire.</p>
598
599     <h3>Comprendre le stockage dans le cache</h3>
600       
601
602       <p>Pour stocker des entités dans le cache,
603       le module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> crée une empreinte (hash) de 22
604       caractères de l'URL qui a fait l'objet d'une requête. Cette empreinte
605       comprend le nom d'hôte, le protocole, le port, le chemin et tout argument
606       de type CGI associé à l'URL, afin d'être sur que plusieurs URLs
607       n'interfèrent pas entre elles.</p>
608
609       <p>Chaque position de l'empreinte peut contenir un caractère
610       choisi parmi 64 caractères différents, il y a donc
611       64^22 possibilités pour une empreinte. Par exemple, une URL peut posséder
612       l'empreinte <code>xyTGxSMO2b68mBCykqkp1w</code>. Cette empreinte est
613       utilisée pour préfixer les noms de fichiers spécifiques à cette URL à
614       l'intérieur du cache; cependant, elle est tout d'abord placée dans les
615       répertoires du cache selon les directives
616       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code> et
617       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>.</p>
618
619       <p>La directive
620       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code>
621       définit le nombre de niveaux de sous-répertoires, et
622       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>
623       le nombre de caractères composant le nom des sous-répertoires. Dans
624       l'exemple donné plus haut, l'empreinte se trouvera à :
625       <code>/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w</code>.</p>
626
627       <p>Cette technique a pour but principal de réduire le nombre de
628       sous-répertoires ou de fichiers contenus dans un répertoire particulier,
629       car le fonctionnement de la plupart des systèmes de fichiers est ralenti
630       quand ce nombre augmente. Avec la valeur "1" pour la directive
631       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>,
632       il peut y avoir au plus 64 sous-répertoires à un niveau quelconque.
633       Avec la valeur "2", il peut y en avoir 64 * 64, etc...
634       A moins d'avoir une bonne raison pour ne pas le faire, l'utilisation de
635       la valeur "1" pour la directive
636       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>
637       est recommandée.</p>
638
639       <p>Le paramétrage de la directive
640       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code>
641       dépend du nombre de fichiers que vous pensez stocker dans le cache.
642       Avec une valeur de "2" comme dans l'exemple donné plus haut,
643       4096 sous-répertoires peuvent être créés au total. Avec 1 million de
644       fichiers dans le cache, cela équivaut à environ 245 URLs mises en cache
645       dans chaque répertoire.</p>
646
647       <p>Chaque URL nécessite au moins deux fichiers dans le cache. Ce sont en
648       général un fichier ".header", qui contient des meta-informations à propos
649       de l'URL, comme la date de son arrivée à expiration,
650       et un fichier ".data" qui est la copie exacte du contenu à servir.</p>
651
652       <p>Dans le cas d'un contenu négocié via l'en-tête "Vary", un répertoire
653       ".vary" sera créé pour l'URL en question. Ce répertoire contiendra de
654       multiples fichiers ".data" correspondant aux différents contenus
655       négociés.</p>
656     
657
658     <h3>Maintenance du cache sur disque</h3>
659       
660
661       <p>Bien que le module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> supprime un contenu
662       du cache lorsqu'il est arrivé à expiration, il ne maintient aucune
663       information à propos de la taille totale du cache ou de l'espace restant
664       disponible.</p>
665
666       <p>Par contre l'utilitaire
667       <a href="programs/htcacheclean.html">htcacheclean</a> fourni avec Apache
668       vous permet, comme son nom l'indique, de nettoyer le cache périodiquement.
669       Déterminer la fréquence à laquelle lancer <a href="programs/htcacheclean.html">htcacheclean</a> et la taille souhaitée
670       pour le cache est une tâche relativement complexe et il vous faudra de
671       nombreux essais et erreurs pour arriver à sélectionner des valeurs
672       optimales.</p>
673
674       <p><a href="programs/htcacheclean.html">htcacheclean</a> opère selon deux
675       modes. Il peut s'exécuter comme démon résident, ou être lancé
676       périodiquement par cron. <a href="programs/htcacheclean.html">htcacheclean</a> peut mettre une heure
677       ou plus pour traiter de très grands caches (plusieurs dizaines de
678       Gigaoctets) et si vous l'exécutez à partir de cron, il vous est
679       conseillé de déterminer la durée typique d'un traitement, afin d'éviter
680       d'exécuter plusieurs instances à la fois.</p>
681
682       <p class="figure">
683       <img src="images/caching_fig1.gif" alt="" width="600" height="406" /><br />
684       <a id="figure1" name="figure1"><dfn>Figure 1</dfn></a>: Croissance
685       typique du cache / séquence de nettoyage.</p>
686
687       <p>Comme <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> ne tient pas compte de l'espace
688       utilisé dans le cache, vous devez vous assurer que
689       <a href="programs/htcacheclean.html">htcacheclean</a> est configuré de
690       façon à laisser suffisamment d'"espace de croissance"
691       à la suite d'un nettoyage.</p>
692     
693
694   </div></div>
695 <div class="bottomlang">
696 <p><span>Langues Disponibles: </span><a href="./en/caching.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
697 <a href="./fr/caching.html" title="Français">&nbsp;fr&nbsp;</a> |
698 <a href="./tr/caching.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
699 </div><div id="footer">
700 <p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
701 <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>
702 </body></html>