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