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