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