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