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