243
Apache L’ESSENTIEL DU CODE ET DES COMMANDES LE GUIDE DE SURVIE Daniel Lopez http://www.free-livres.com/

Apache - L'Essentiel Du Code Et Des Commandes

Embed Size (px)

Citation preview

Page 1: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 1/242

ApacheL’ESSENTIEL DU CODE ET DES COMMANDES

LE GUIDE DE SURVIEDaniel Lopez

http://www.free-livres.com/

Page 2: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 2/242

Apache

Daniel LopezJesus Blanco

Page 3: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 3/242

CampusPress a apporté le plus grand soin à la réalisation de ce livre afin de vous

fournir une information complète et fiable. Cependant, CampusPress n’assume de

responsabilités, ni pour son utilisation, ni pour les contrefaçons de brevets ouatteintes aux droits de tierces personnes qui pourraient résulter de cette utilisation.

Les exemples ou les programmes présents dans cet ouvrage sont fournis pour illus-

trer les descriptions théoriques. Ils ne sont en aucun cas destinés à une utilisation

commerciale ou professionnelle.

CampusPress ne pourra en aucun cas être tenu pour responsable des préjudices ou

dommages de quelque nature que ce soit pouvant résulter de l’utilisation deces exemples ou programmes.

Tous les noms de produits ou autres marques cités dans ce livre sont des marques

déposées par leurs propriétaires respectifs.

All rights reserved. No part of this book may be reproduced or transmitted in any

form or by any means, electronic or mechanical, including photocopying,

recording or by any information storage retrieval system, without permission from

Pearson Education, Inc.

Aucune représentation ou reproduction, même partielle, autre que celles prévues

à l’article L. 122-5 2˚ et 3˚ a) du code de la propriété intellectuelle ne peut être

faite sans l’autorisation expresse de Pearson Education France ou, le cas échéant,

sans le respect des modalités prévues à l’article L. 122-10 dudit code.

Publié par CampusPress

47 bis, rue des Vinaigriers75010 PARIS

Tél : 01 72 74 90 00

Réalisation PAO : Léa B

Auteur : Daniel Lopez et Jesus Blanco

CampusPress est une marque

de Pearson Education France

Tous droits réservés

Titre original : Apache Phrasebook

Traduit de l’américain par :

Nathalie Le Guillou de Penanros

ISBN original : 0-672-32836-4

Copyright © 2006 by Sams Publishing

www.samspublishing.com

Tous droits réservés

Sams Publishing

800 East 96th,

Indianapolis, Indiana 46240 USA

ISBN : 978-2-7440-4001-6

Copyright © 2009

Page 4: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 4/242

Table des matières

Introduction 1

1 Les bases d'Apache 3

Découverte d'Apache 3

Pour savoir si Apache est déjà installé 5

Installation d'Apache 1.3 sous Linux et UNIX 6Installation d'Apache 2.0 sous Linux et UNIX 7

Installation d'Apache sous Windows 8

Configuration de base des fichiers 9

Utilisation de plusieurs fichiers de configuration 11

Démarrage, arrêt et redémarrage d'Apache 12

Modification de l'adresse et du port utilisés par Apache 14Modification de l'utilisateur Apache 15

Spécification d'un nom de serveur 16

Création d'une icône pour "Ma page Web" 16

Découverte des modules disponibles sur le serveur 17

Activation et désactivation de modules individuels 18

Ajout de modules après la compilation d'Apachesans recompilation 19

Publication de contenu 20

2 Dépannage 25

A l'aide ! Mon serveur Apache ne fonctionne pas ! 25

Le journal d'erreurs 26

Connexion au démon du journal système 27Contrôle de la quantité des informations consignées 27

Test de la configuration Apache à la recherchede problèmes 29

Test d'Apache à partir de la ligne de commande 29

Page 5: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 5/242

IV  APACHE

 Vérification du fonctionnement d'Apache 31

Autres manières d'arrêter Apache 32

Utilisation d'Apache… pour déboguer Apache 33

Erreurs de démarrage 34

Erreurs de refus d'accès 37

Erreurs internes au serveur 38

Autres fichiers pour la journalisation des erreurs 40

Les redirections ne fonctionnent pas 40

Liste de vérification pour le dépannage 41

Si tout le reste a échoué 44

3 Journaux et surveillance 45

Introduction à la consignation des erreurs dans Apache 45

Fichiers journaux Apache par défaut 46

Création des formats de journaux 46

Création d'un fichier journal personnalisé 48

Redirection des journaux vers un programme externe 49

Consignation conditionnelle de requêtes 49

Surveillance des personnes se connectant à votre site 50

Surveillance d'Apache avec mo d_status 51

Surveillance d'Apache avec SNMP 52Analyse des journaux à l'aide d'outils Open Source 53

Surveillance de vos journaux en temps réel 53

Consignation des requêtes dans une base de données 54

Rotation et archivage des journaux 55

Contrôle de la résolution des adresses IP 56

Traitement d'adresses IP consignées 56Redémarrage automatique d'Apache en cas de panne 57

Fusion et séparation de fichiers journaux 58

Conservation de fichiers séparés pour chaquehôte virtuel 59

Entrées de journaux communes 60

Page 6: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 6/242

 V Table des matières

4 Mappage d'URL et contenu dynamique 63

Mappage d'URL 63Mappage d'URL et de fichiers avec Alias  64

Mappage de motifs d'URL à des fichiersavec AliasMatch 64

Redirection d'une page vers un autre emplacement 65

Redirection vers la dernière version d'un fichier 66

Echec de la redirection ou requêtes non autorisées 67

Définition des gestionnaires de contenu 67

Les types MIME 68

Configuration des types MIME 69

Les bases de l'exécution des scripts CGI 69

Désignation de ressources comme des CGI exécutables 70

Association de scripts à des méthodes HTTP

et des types MIME 71Dépannage relatif à l'exécution des scripts CGI 72

Amélioration des performances du script CGI 72

SSI 73

Configuration de SSI 74

Paramétrage des variables d'environnement 74

Paramétrage dynamique des variables d'environnement 75 Variables d'environnement spéciales 76

Négociation du contenu 77

Configuration de la négociation du contenu 78

Affectation de jeux de caractères par défautet de priorités de langue 80

Mappage avancé d'URL avec mod_rewrite  81Problème de l'oubli de la barre oblique finale 81

Correction des fautes de frappe 82

Résolution des problèmes de casse 83

 Validation de pages avec Tidy  84

Page 7: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 7/242

 VI APACHE

5 Hébergement virtuel 87

Définition de l'hébergement virtuel 87Hébergement virtuel basé sur IP 88

Configuration de l'hébergement virtuel basé sur IP 89

Hébergement virtuel basé sur le nom 90

Configuration de l'hébergement virtuel basé sur le nom 91

Que se passe-t-il si une requête ne correspondà aucun hôte virtuel ? 92

Mélange d'hôtes basés sur IP et basés sur le nom 94

Débogage des configurations d'hôtes virtuels 95

Utilisation de SSL avec des hôtes virtuels baséssur le nom 96

6 Sécurité et contrôle d'accès 101

Le contrôle d'accès, une exigence ? 101Différences existant entre les versions d'Apache 102

L'authentification basique et digest  102

Présentation du contrôle d'accès Apache 104

Configuration des autorisationset des authentifications Apache 105

Création d'une base de données utilisateur 106Emploi de Require pour autoriser des utilisateurs

et des groupes 107

Gestion d'un grand nombre d'utilisateurs 108

Autorisation d'accès à des adresses IPspécifiques uniquement 108

Refuser l'accès à des adresses IP spécifiques 109

Combinaison des méthodes de contrôle d'accès 110

Personnalisation de la page de refus d'accès 111

Donner le pouvoir aux utilisateurs 112

Refus d'accès aux fichiers système et sensibles 113

Restriction d'exécution de programmes 114

Eviter les abus 115

Page 8: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 8/242

 VIITable des matières

Désactivation des listings de répertoire 115

Modification de l'en-tête Server:  116

Empêcher le vol de vos images (hotlinking) 117

Restriction de méthodes HTTP spécifiques 118

Restriction d'accès basée sur le type du navigateur 119

Utilisation des sections d'emplacement et de répertoire 120

Autres modules d'authentification 120

Apache 2.2 122

Mise à jour de la sécurité Apache 123

Liste de contrôle de sécurité 123

Désactiver les modules inutiles 124

Suppression des échantillons de script 125

Restreindre ou désactiver l'exécution de CGI et de SSI 125

 Vérifier les autorisations de fichiers 126

Limiter ou désactiver la fonctionnalité de proxy 127

Restreindre l'accès à votre serveur par défaut 127

7 SSL et TLS 129

Définition de SSL 129

Fonctionnement de SSL 130

Compilation d'OpenSSL 131Clés de cryptage 132

Création d'une paire de clés 133

Création d'une paire de clés protégéespar mot de passe 133

Suppression du mot de passe d'une clé 134

Certificats 134Création d'une requête de signature de certificat 135

Affichage du contenu d'une requête de signaturede certificat 137

Création d'un certificat autosigné 137

Compilation de la prise en charge SSL dans Apache 1.3 138

Compilation de la prise en charge SSL dans Apache 2.x 140

Page 9: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 9/242

 VIII APACHE

Configuration minimale d'Apache 140

Démarrage d'Apache avec prise en charge SSL 141

SSLPassPhraseDialog  142

Amélioration des performances SSL 143

Forcer le contenu à être desservi par SSL 144

SSL et hôtes virtuels SSL basés sur le nom 144

Utilisation des modules Auth d'Apache avec SSL 145

Messages d'avertissement lors de l'accès

à un site Web activé par SSL 146

Création de certificats client 146

Authentification à l'aide des certificats client 147

Alternatives à mod_ssl  148

Test de sites Web activés par SSLà partir de la ligne de commande 148

Contourner les implémentations SSLprésentant des bogues 149

Contrôle d'accès complexe avec mod_ssl  150

Chapitres annexes 150

8 Publication de contenu avec DAV 151

Apache et la publication de contenu 151

Présentation de WebDAV 152

Avantages de l'utilisation de mod_dav  153

WebDAV et le protocole HTTP 154

Installation de mod_dav sous Apache 2.0 155

Installation de mod_dav sous Apache 1.3 156

Configuration WebDAV de base 156

Sécurisation de votre configuration WebDAV 157

Accès aux ressources DAV depuis Microsoft Office 158

Accès aux ressources DAV depuis Microsoft Windows 159

Accès aux ressources DAV depuis Firefox 161

Accès à DAV depuis la ligne de commande 162

Page 10: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 10/242

IXTable des matières

Gestion des clients présentant des bogues 164

mod_speling  et DAV 165

Contenu dynamique et DAV 165

Activation des pages par utilisateur 166

Autres répertoires utilisateur 167

Résolution des problèmes avec DAVLockDB 168

9 Performances et évolutivité 169

Personnalisation d'Apache 169

Les performances et l'évolutivité 170

Personnalisation du matériel 170

Elargissement des limites du système d'exploitation 171

Elargissement des limites du système d'exploitationsur les processus 172

Augmentation des descripteurs de fichiersdu système d'exploitation 173

Contrôle des processus externes 173

Amélioration des performances du système de fichiers 174

Gestion de liens symboliques 175

Personnalisation du réseau et des paramètres de statut 178

Eviter les abus 180Restriction des connexions et de la bande passante 181

Gestion des robots 183

Proxy inverses et systèmes d'équilibrage des charges 184

Mise en cache et compression 185

Optimisations spécifiques aux modules 186

Alternatives à Apache 186

10 Proxy Apache et mise en cache 187

De l'utilité de la mise en cache et des proxy 187

Proxy ordinaires et inverses 188

Différences entre Apache 1.3, 2.0 et 2.2 188

Page 11: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 11/242

X APACHE

Activation de la prise en charge de mod_proxy  189

Activation de la prise en charge des proxy ordinaires 189

Utilisation d'un proxy inverse pour unifierun espace URL 191

Masquage des serveurs d'arrière-guichet 192

Eviter l'inversion des URL en proxy 193

Amélioration des performances 193

Déchargement du processus SSL 195

Transfert des informations de proxy dans les en-têtes 195

Manipulation des en-têtes 196

Implémentation d'un proxy de cache 197

Mise en cache dans Apache 2 198

Equilibrage des charges 199

Connexion à Tomcat 200

Autres proxy 201Proxy HTTP transparents 201

11 Multitraitement et modules de protocole 203

Evolution de l'architecture Apache 203

Sélection d'un module multitraitement 204

Découverte des MPM basés sur les processus 204Configuration de MPM Prefork 205

MPM basés sur des threads et MPM hybrides 207

Configuration de MPM Worker 207

Autres MPM 208

Description des filtres Apache 2 209

Utilisation d'Apache comme serveur FTP 210Utilisation d'Apache comme serveur POP3 211

Compression de contenu à la volée 212

  Index 215

Page 12: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 12/242

XIA propos des auteurs

A propos des auteurs

Daniel Lopez est le fondateur de la société BitRock

qui élabore des outils d'installation et de gestion multi-

plates-formes pour divers logiciels commerciaux et Open

Source. Il y occupe actuellement le poste de directeur 

technique.

Il a fait partie de la première équipe d'ingénieurs deCovalent Technologies, Inc., qui propose des services et

une assistance logicielle Apache aux entreprises. Il a écrit

plusieurs guides populaires sur Apache et Linux. Il est

également l'auteur du module Apache mod_mono pour 

l'intégration d'Apache et de .NET, ainsi que de Coman-

che, un outil de configuration de GUI pour Apache.

Daniel Lopez intervient régulièrement dans des confé-

rences sur l'Open Source, comme LinuxWorld, Apache-

Con et la Convention Open Source O'Reilly. Il possède

un master en télécommunications de la Escuela Superior 

de Ingenieros de Séville et du Danmarks Tekniske Uni-

versitet. Il est d'autre part membre de l' Apache Software 

Foundation. Jesus Blanco est responsable de projets auprès de la

société BitRock, précédemment citée. Il a travaillé pour 

le Spanish Institute of Foreign Commerce , ce qui l'a conduit à

exercer ses talents au Brésil, en France, en Allemagne, au

Portugal et en Asie du Sud-Est. Jesus Blanco a participé au

projet de documentation Apache, dont il a traduit une

grande partie en espagnol. Il a obtenu un diplôme d'admi-

nistration des affaires (université de Séville) et un master 

en informatique (UNED).

Page 13: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 13/242

Page 14: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 14/242

Introduction

Apache s'est toujours trouvé au cœur du Web, depuis ses

débuts modestes où il n'était qu'un fork, une "bifurcation"

du serveur NCSA, jusqu'à sa dernière version qui regorge

de fonctions. Au fil du temps, ses capacités ont augmenté

autant que sa complexité, à tel point que son approche

peut se révéler très intimidante pour les novices. L'objectif 

de cet ouvrage est de vous aider à naviguer parmi les cen-

taines d'options du produit. Ce livre vous servira éga-

lement d'aide-mémoire pratique pour les tâches les plusfréquentes. De la même façon qu'un guide linguistique se

révèle un compagnon précieux pour qui voyage à l'étran-

ger, ce Guide de survie Apache vous sera d'un grand secours

pour configurer vos serveurs Web.

Le Guide de survie Apache  propose des conseils et des

extraits de code qui vous aideront à personnaliser Apache,afin que celui-ci réponde à vos besoins particuliers. Sachez

toutefois que cet ouvrage ne couvre pas tous les aspects de

ce très vaste sujet.

Page 15: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 15/242

Page 16: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 16/242

1

Les bases d'Apache

Découverte d'ApacheCe chapitre propose une introduction rapide au serveur 

Web Apache. Nous examinerons son architecture, ainsique les différences qui existent entre ses principales ver-

sions (1.3 et 2.x). Nous expliquerons comment téléchar-

ger et compiler Apache à partir de la source ou à l'aide de

packages binaires et comment activer ou désactiver les

modules communs. Nous parlerons de la mise en forme

des fichiers de serveur, ainsi que de la structure et de la

syntaxe des fichiers de configuration du serveur. Vous

apprendrez également ici à démarrer, à arrêter, puis à

redémarrer Apache. Enfin, vous pourrez modifier la

configuration minimale nécessaires pour faire fonctionner 

le serveur comme vous le souhaitez.

Avec près de 68 % de parts de marché, selon Netcraft

(http://www.netcraft.com), Apache est actuellementle serveur Web le plus populaire sur Internet.

Voici ses principales caractéristiques :

b Portable. Apache s'exécute sous Linux, Windows,

Mac OS X, ainsi que d'autres systèmes d'exploitation.

Page 17: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 17/242

4 CHAPITRE 1 Les bases d'Apache

b Flexible. Son architecture étant modulaire et extensi-

ble, Apache peut être configuré de diverses manières.

b Open Source. Vous pouvez télécharger et utiliser 

Apache gratuitement. La disponibilité du code source

vous permet d'en créer des versions personnalisées.

Il existe deux versions principales d'Apache, largement

utilisées aujourd'hui : la série 1.3 et la série 2.x.

Apache 2.0 propose certaines améliorations et fonction-nalités qui faisaient défaut à la version 1.3 ; il est toutefois

incompatible avec tous les modules écrits pour cette pré-

cédente mouture. En règle générale, vous utiliserez Apa-

che 2.x dans les cas suivants :

b Vous disposez d'un système d'exploitation Windows.

b Vous devez desservir une grande quantité de contenustatique qui pourrait bénéficier d'un module de traite-

ment en threads sous UNIX.

b Vous avez besoin de l'une de ses nouvelles fonction-

nalités (non disponible dans Apache 2.0).

b Vous ne connaissez pas du tout Apache.

En revanche, vous opterez pour Apache 1.3 dans les cas

suivants :

b Vous avez besoin d'exécuter des modules internes ou

tiers n'ayant pas été adaptés à Apache 2.x.

b Vous devez exécuter un logiciel, par exemple PHP,

dont les extensions ne sont pas compatibles avec lesthreads ou processus légers (bien qu'un même code

s'exécutera probablement de façon satisfaisante sous

Apache 2.0 avec le MPM Prefork).

b Vous connaissez déjà Apache 1.3 et n'avez pas de

besoins spécifiques de mise à niveau.

Page 18: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 18/242

5Pour savoir si Apache est déjà installé

Pour savoir si Apache est déjà

installé

Si vous utilisez un système Linux, Apache est certaine-

ment déjà installé. Si votre distribution fait appel au sys-

tème de gestion de package rpm, tapez les commandes qui

précèdent pour le vérifier. Il existe des commandes diffé-

rentes, car les distributions n'adoptent pas toutes le même

nom de package.

Avec la plupart des systèmes de type UNIX, notamment

Mac OS X, vous pouvez aussi vérifier directement que le

binaire Apache est installé, en recourant à l'une des com-mandes suivantes :

httpd –v

/usr/sbin/httpd -v

Si la réponse est positive, le résultat renvoyé ressemblera à

ceci :

Server version: Apache/2.0.54

Server built: Apr 16 2005 14:25:31

Vous obtiendrez une réponse encore plus détaillée avec

cette commande :

httpd -V

Sur les systèmes Windows, pour savoir si Apache est

installé, accédez à la partie Ajout/Suppression de pro-

grammes du Panneau de configuration. Le chemin d'ins-

tallation est le suivant :

C:\Program Files\Apache Group

rpm –q httpdrpm –q apacherpm –q apache2

Page 19: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 19/242

6 CHAPITRE 1 Les bases d'Apache

Pour se procurer Apache

Par défaut, Apache est présent dans la plupart des versions deLinux et dans Mac OS X. Vous pouvez télécharger les binaireset le source pour diverses plates-formes, notamment Windows,sur le site Web officiel d'Apache, à l'adresse http://www.apa-chefrance.com.

Installation d'Apache 1.3sous Linux et UNIX

Vous pouvez utiliser les outils de gestion de package de

votre système d'exploitation pour installer des versions

pré-implantées du serveur. Cette solution est souvent pré-

férable, car elle s'intègre bien avec le système de fichiers

existant ou d'autres packages fournis par des tiers. Il est

toutefois important de savoir construire sa propre versiond'Apache à partir du code source. Cela permet, par exem-

ple, de créer un serveur personnalisé selon les besoins ou

bien d'appliquer rapidement des correctifs de sécurité dès

leur publication.

La première étape consiste à vous rendre sur le site Web

http://httpd.apache.org et à télécharger l'archive tar

du source approprié. Dans cet ouvrage, lorsque nous

ferons référence à une fonctionnalité spécifique de la ver-

sion 1.3, nous supposerons que vous avez installé la version

Apache 1.3.33. Il s'agit en fait de la version la plus récente

de la série 1.3 à l'heure où nous rédigeons ces lignes.

L'archive tar du source s'intitule apache_1.3.33.tar.gz.

tar xvfz apache_1.3.33.tar.gzcd apache_1.3.33./configure --prefix=/usr/local/apache --enable-shared=maxmakemake install

Page 20: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 20/242

7Installation d'Apache 2.0 sous Linux et UNIX

Vous pouvez maintenant décompresser, configurer, com-

piler et installer Apache en appliquant les commandes du

listing précédent.

L'option - -prefix indique le chemin sous lequel doit être

installé le serveur. --enable-shared=max active la prise en

charge du module chargeable, nécessaire pour prolonger 

ou personnaliser les fonctionnalités par la suite, sans avoir 

à recompiler le serveur.

Info

Certaines versions d'Apache se terminent par .tar.bz2. Celasignifie qu'elles ont été compressées à l'aide de l'outil bzip2.Bien qu'il soit plus lent à compresser et à décompresser, ceformat permet de réduire la taille des fichiers de distribution ;il est désormais fréquemment utilisé dans de nombreux projetsOpen Source. Pour décompresser ce type de fichier, vous pou-vez effectuer l'une des opérations suivantes sur la plupart dessystèmes Linux modernes :

bunzip2 < apache_1.3.33.tar.bz2 | tar xvf -

tar xvfj apache_1.3.33.tar.bz2

Installation d'Apache 2.0sous Linux et UNIX

Ce processus est analogue à celui décrit précédemment

pour la version 1.3, même si les options d'activation de

prise en charge des modules chargeables sont différentes.

tar xvfz apache_2.0.54.tar.gzcd apache_2.0.54

./configure --prefix=/usr/local/apache --enable-so--enable-mods-shared=mostmakemake install

Page 21: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 21/242

8 CHAPITRE 1 Les bases d'Apache

Installation d'Apache

sous WindowsL'installation d'Apache sous Windows est encore plus sim-

ple que sous UNIX. Le processus est quasiment identique

pour Apache 1.3 et 2.x. Il vous suffit de télécharger le

package, à l'adresse http://httpd.apache.org, puis de

lancer l'installation du binaire.

L'assistant vous demande ensuite où installer le serveur,

ainsi que d'autres informations :

b le nom de domaine du réseau ;

b le nom de domaine totalement qualifié du serveur ;

b l'adresse e-mail de l'administrateur.

Le nom du serveur est celui utilisé par vos clients pour 

accéder à votre serveur. L'adresse e-mail sera affichée dans

les messages d'erreur, afin que vos visiteurs sachent qui

contacter en cas de problème. Vous aurez également la

possibilité d'exécuter Apache sous forme de service. Cette

option est utile, par exemple si Apache doit s'exécuter à

chaque démarrage du serveur. Dans les autres cas, vouspourrez toujours relancer Apache à partir de la ligne de

commande.

Page 22: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 22/242

9Configuration de base des fichiers

Est-il possible d'installer différentes versions d'Apache sur lamême machine ?

Oui, cela est tout à fait possible, et les raisons de le faire sontnombreuses. Il suffit simplement de choisir des préfixes d'instal-lation différents. Ainsi, par exemple, vous pouvez installer unserveur Apache 1.3 sous /usr/local/apache et une version 2.0sous /usr/local/apache2. Pour exécuter les serveurs simulta-nément, attribuez-leur des combinaisons d'adresses et de portsdifférentes.

Souvenez-vous qu'il n'est pas obligatoire d'installer plusieursserveurs Apache pour exécuter plusieurs sites Web. Un seulserveur Apache peut suffire, grâce à la fonction d'hôte virtuel(voir Chapitre 5).Il est également possible de disposer de plusieurs serveurs,chacun desservant une partie séparée d'un site Web. Vouspouvez, par exemple, amener un serveur Apache 2.0 à fournirle contenu principal du site www.exemple.com et déléguer lecontenu de www.exemple.com/connexion à un serveur Apa-che 1.3 exécutant une application mod_perl existante. Vousutiliserez alors un proxy inverse (voir Chapitre 10).

Configuration de base des fichiersLe Tableau 1.1 indique l'emplacement par défaut du prin-

cipal fichier de configuration Apache sous divers systèmes

d'exploitation. Puisque dans certains cas les versions 1.3

et 2 du serveur devront coexister côte à côte, le nom du

fichier peut différer pour chaque version.

Page 23: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 23/242

10 CHAPITRE 1 Les bases d'Apache

Tableau 1.1. Emplacement du fichier httpd.conf sur différentssystèmes

Le principal fichier de configuration Apache est appelé

httpd.conf. Son emplacement varie selon que vous utili-

siez Windows ou Linux d'une part, et selon que vous ayez

compilé Apache à partir du code source ou utilisé lebinaire fourni par votre distribution, d'autre part. Vous

trouverez des suggestions d'emplacements au Tableau 1.1.

Apache utilise, pour sa configuration, des fichiers en texte

brut. Ceux-ci peuvent contenir des directives et des sec-

tions. Pour y placer des commentaires, faites-les précéder 

Emplacement du fichier

de configuration

Plate-forme

/etc/httpd/httpd.conf 

/etc/httpd/httpd2.conf 

/etc/httpd/conf/httpd.conf 

/etc/httpd/conf/httpd2.conf 

Suse, Mandrake, anciens

systèmes Red Hat, systèmes

Newer Red, Fedora Core

/usr/local/apache2/conf 

/usr/local/apache/conf 

Lors de la compilation à partir 

du source, comme indiqué

précédemment dans ce

chapitre.

c:\Program Files\Apache

Group\Apache2\conf\

httpd.conf 

c:\Program Files\Apache

Group\Apache2\conf\

httpd.conf 

Windows

/private/etc/httpd/httpd.conf  Mac OS X

Page 24: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 24/242

11Utilisation de plusieurs fichiers de configuration

du signe dièse (#) au début de la ligne (ils seront ignorés

par Apache). Sachez également qu'une directive peut

s'étendre sur plusieurs lignes à condition de terminer la

ligne précédente par une barre oblique inversée (\).

Les directives gèrent tous les aspects du serveur. Vous

pouvez en placer dans des sections, de sorte qu'elles ne

s'appliquent qu'au contenu desservi par un répertoire ou

un emplacement particulier, aux requêtes desservies par 

un hôte virtuel particulier, etc.

Lorsqu'un argument vers une directive correspond à un

chemin relatif, on suppose qu'il est relatif au chemin d'ins-

tallation du serveur (racine du serveur). Ainsi, par exemple,

si vous avez installé Apache à partir de la source (voir 

précédemment), la racine du serveur est /usr/local/apache

ou /usr/local/apache2. Vous pouvez modifier la valeur par défaut avec la directive ServerRoot.

Utilisation de plusieurs fichiersde configuration

Il est quelquefois utile de répartir la configuration du ser-

veur dans plusieurs fichiers. La directive Include permet

d'inclure des fichiers individuels, tous les fichiers d'unrépertoire particulier ou les fichiers correspondant à un

certain motif (nous le voyons dans ces exemples). Si un

chemin relatif est indiqué, il sera considéré comme étant

relatif au chemin spécifié par la directive ServerRoot.

Include /etc/httpd/conf/perl.confInclude conf.d/*.confInclude siteconf/

Page 25: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 25/242

12 CHAPITRE 1 Les bases d'Apache

Cela survient généralement avec les distributions Linux

qui concernent des modules Apache, tels que les RPM.

Chacun de ces packages peut placer son propre fichier de

configuration dans un répertoire spécifique où Apache ira

le chercher directement.

Démarrage, arrêt et redémarraged'Apache

Pour démarrer, arrêter ou redémarrer Apache, vous pou-vez émettre n'importe laquelle de ces commandes. Selon

votre installation, vous devrez peut-être fournir un che-

min absolu pour apachectl, comme /usr/sbin/apachectl

ou /usr/local/apache/bin/apachectl. Même s'il est pos-

sible de contrôler directement Apache sous UNIX à l'aide

du binaire httpd, nous recommandons l'outil apachectl.

Le programme de prise en charge apachectl est distribué

dans le cadre d'Apache ; il englobe les fonctionnalités

communes dans un script simple à utiliser.

Sous UNIX, si Apache se connecte à un port privilégié

(ceux compris entre 1 et 1 024), vous aurez besoin de pri-

vilèges racine pour démarrer le serveur.

Si vous modifiez les fichiers de configuration, il faut le

signaler à Apache, de sorte que ces modifications soient

prises en compte. Pour cela, vous pouvez arrêter, puis

redémarrer le serveur, envoyer un signal de redémarrage

ou réaliser un redémarrage "en douceur" (dit " graceful ").

apachectl startapachectl stopapachectl restartapachectl graceful

Page 26: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 26/242

13Démarrage, arrêt et redémarrage d'Apache

Apache relira alors sa configuration. Pour connaître la dif-

férence entre un redémarrage ordinaire et un redémarrage

"en douceur", consultez la section suivante.

Outre l'utilisation du script apachectl, vous pouvez

employer la commande kill pour envoyer directement

des signaux au processus Apache parent. Nous verrons

cela en détail à la section "Autres méthodes pour arrêter 

Apache", au Chapitre 2.

Sous Windows, vous pouvez informer Apache directe-

ment, à l'aide de l'exécutable apache.exe :

apache.exe -k restart

apache.exe -k graceful

apache.exe -k stop

Vous avez accès à des raccourcis de ces commandes dansles entrées du menu Start que crée le système d'installation

d'Apache. Si vous avez installé Apache en tant que ser-

vice, vous pouvez le démarrer ou l'arrêter à l'aide des

outils de gestion du service de Windows, comme suit :

dans le Panneau de configuration, sélectionnez Outils

d'administration, puis cliquez sur l'icône Services.

Apache 2.0 est en outre capable de placer un programme,

Apache Monitor, dans la barre des tâches. Il s'agit d'une

simple interface graphique utilisateur pouvant servir à

démarrer et à arrêter le serveur directement ou sous forme

de service. Ce programme est installé au démarrage, mais

vous pouvez aussi le lancer à partir de l'entrée Apache du

menu Démarrer.

Page 27: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 27/242

14 CHAPITRE 1 Les bases d'Apache

Qu'est-ce qu'un redémarrage "en douceur" ?

Un redémarrage "ordinaire" arrête le serveur Apache, puis lerelance. En conséquence, les requêtes en cours sont abandonnéeset aucune nouvelle requête n'est desservie tant que le serveurest à l'arrêt. Un redémarrage normal peut donc entraîner uneinterruption momentanée du service.

Un redémarrage "en douceur" ("graceful") adopte une approchedifférente. Chaque thread (ou processus) desservant un client

continue à traiter la requête en cours. Une fois cela terminé, ilest arrêté et remplacé par un nouveau thread (ou processus)contenant la nouvelle configuration. Cela assure l'homogénéitéde fonctionnement du serveur Web, sans qu'il y ait interruption.

La manière la plus pratique de réaliser un redémarrage "en dou-ceur" sous UNIX consiste à émettre la commande suivante :

# apachectl graceful

Sous Windows, utilisez : Apache.exe –k graceful

Modification de l'adresse

et du port utilisés par Apache

Apache doit connaître l'adresse IP et le port à écouter 

pour les requêtes entrantes. Vous pouvez les préciser à l'aide

de la directiveListen

. Celle-ci prend un port à écouter et,en option, une adresse IP. Si aucune adresse IP n'est spéci-

fiée, Apache écoute toutes les adresses disponibles. Dans

cet exemple, Apache écoute les requêtes du port 81 et de

l'adresse IP 192.168.200.4, puis celles du port 8080 à toutes

les adresses disponibles. Plusieurs directives Listen peuvent

permettre de préciser différents ports et adresses IP à écouter.

Listen 192.168.200.4:80Listen 8080

Page 28: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 28/242

15Modification de l'utilisateur Apache

Vous pouvez également utiliser la directive Port pour 

préciser le port qu'Apache doit écouter, mais si une

directive Listen est spécifiée, Port n'aura aucun effet.

Reportez-vous au Chapitre 4 pour en savoir plus sur la

directive Port employée pour construire des URL auto-

référentielles.

La configuration est plus importante quand vous devez

supporter des hôtes virtuels fondés sur des noms. Pour 

plus de détail, voyez le Chapitre 5.

Outre Listen, Apache 1.3 propose une directive annexe,

appelée BindAddress. Celle-ci étant devenue obsolète,

nous déconseillons son emploi.

Modification de l'utilisateurApache

Vous pouvez préciser le groupe et l'utilisateur sous les-

quels s'exécute Apache, grâce aux directives User etGroup. Pour des raisons de sécurité, il est déconseillé

d'exécuter n'importe quel serveur sous forme de racine,

car un problème de configuration ou de programmation

peut exposer la totalité du serveur. Quand Apache est

exécuté sous forme de racine, il réalise toutes les actions

nécessitant des privilèges de superutilisateur (comme la

liaison au port 80) et dessert les requêtes réelles que l'uti-

lisateur et le groupe ont spécifiées dans la configuration

Apache. Les privilèges et capacités de l'ID utilisateur sont

généralement réduits.

User nobodyGroup nobody

Page 29: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 29/242

16 CHAPITRE 1 Les bases d'Apache

Spécification d'un nom de serveur

Dans certains cas, Apache doit construire des URL

autoréférentielles. Il s'agit d'URL qui font référence au

serveur lui-même. Il est parfois nécessaire, par exemple,

de rediriger une requête vers une autre page ou d'afficher 

l'adresse du site Web à la fin d'une page d'erreur. Par défaut,on utilise le domaine spécifié avec la directive ServerName.

Reportez-vous au Chapitre 2 pour en savoir plus sur l'uti-

lisation des directives UseCanonicalName et Port destinées

à contrôler ce comportement.

Si aucun nom de serveur n'est spécifié, Apache tente d'en

trouver un valide en réalisant une recherche DNS inver-

sée sur l'adresse IP du serveur. Si le serveur DNS n'est pas

correctement configuré, l'opération peut être longue ;

l'auteur de la demande devra patienter un certain temps.

Création d'une icônepour "Ma page Web"

De nombreux navigateurs récents, notamment Internet

Explorer, Mozilla et Konqueror vous permettent d'associer 

une icône à un signet. Quand vous placez un signet sur 

une page, le navigateur demande un fichier favicon.ico

vers le répertoire contenant des documents porteurs de

signets. Le fichier  favicon.ico représente une icône au

format Windows.

ServerName www.exemple.com

 AliasMatch /favicon.ico/usr/local/apache2/icons/site.ico

Page 30: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 30/242

17Découverte des modules disponibles sur le serveur

Vous pouvez utiliser la directive AliasMatch pour rediri-

ger toutes les requêtes de fichiers favicon.ico vers un seul

emplacement contenant l'icône de votre site (nous le

voyons dans cet exemple).

Découverte des modules

disponibles sur le serveur

Cette commande répertorie les modules compilés dans

votre binaire de serveur ; elle doit renvoyer un résultat

analogue à ceci :

Compiled in modules:core.c

prefork.c

http_core.c

mod_so.c

Si vous avez compilé Apache avec une prise en charge de

module chargeable, vos modules seront intégrés sous

forme de bibliothèques partagées et placés par défaut dans

un répertoire nommé modules/ (Apache 2.x) ou libexec/

(Apache 1.3). Pour voir les modules partagés chargés dans

le serveur au moment de l'exécution, vous devrez étudier le

fichier httpd.conf et rechercher les directives LoadModule

appropriées. Cela n'est pas nécessaire avec Apache 2.1/2.2,

car httpd -M répertorie tous les modules, y compris ceuxchargés au moment de l'exécution.

# httpd -l

Page 31: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 31/242

18 CHAPITRE 1 Les bases d'Apache

Activation et désactivation

de modules individuels

Vous pouvez activer ou désactiver des modules indivi-

duels au moment de la compilation, à l'aide des options

--enable- module  et --disable- module  de la commandeconfigure. L'exemple précédent explique le fonctionne-

ment du module mod_status distribué dans le cadre

d'Apache.

Si votre serveur a été compilé avec une prise en charge de

module chargeable, vous pouvez désactiver un module en

transformant simplement en commentaire la ligne quicharge le module d'un serveur :

#LoadModule mod_status modules/mod_status.so

Sous Apache 1.3, vous pouvez effacer la liste des modules

actifs, notamment ceux compilés, à l'aide d'une directive

ClearModuleList. Vous devrez ensuite employer une

directive AddModule pour chaque module à utiliser. Lafonctionnalité prévue par ClearModuleList n'est pas dis-

ponible dans Apache 2.x.

Si vous désactivez un module, n'oubliez pas de le suppri-

mer des directives du fichier httpd.conf qu'il apporte ou

de l'inclure dans une section <ifModule> (comme indi-

qué), faute de quoi le serveur risque de ne pas démarrer :<ifModule mod_status.c>

ExtendedStatus On

</ifModule>

./configure (...) --enable-status

./configure (...) --disable-status

Page 32: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 32/242

19Ajout de modules après la compilation d'Apache sans recompilation

Ajout de modules après

la compilation d'Apachesans recompilation

Eh oui, vous pouvez ajouter des modules à Apache sans

recompiler, mais uniquement simod_so

est déjà compilédans votre serveur. Pour savoir si c'est le cas, consultez

la section "Découverte des modules disponibles sur le

serveur".

Vous pouvez construire un module à partir des sources, à

l'aide d'apxs, un outil permettant de construire et d'installer 

des modules d'extension inclus par défaut dans Apache.

Pour compiler et installer un module avec apxs, il suffit de

passer du répertoire courant à celui qui contient le module,

puis de taper :

# apxs –c mod_usertrack.c

Une fois que le module est compilé, il faut le copier dans

le répertoire des modules Apache et modifier le fichier deconfiguration. apxs peut gérer tout cela automatique-

ment, grâce à cette ligne de code :

# apxs –cia mod_usertrack.c

Cette approche fonctionne pour les modules simples, tels

que ceux inclus dans la distribution Apache. Pour des modu-

les tiers plus complexes, comme PHP, il existe générale-

ment des commutateurs --with-apxs ou --with-apxs2 à

transférer dans le script de configuration.

Si vous possédez une version binaire du module disponi-

ble, inutile d'entreprendre ces étapes liées à apxs. Cela

vaut en particulier si vous avez déjà compilé de nombreux

# apxs –cia mod_usertrack.c

Page 33: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 33/242

20 CHAPITRE 1 Les bases d'Apache

modules optionnels lors de la construction du serveur ou

si le module est déjà fourni dans le cadre de votre distribu-

tion Linux ou de votre package d'installation Windows.

Si vous utilisez Apache 1.3, vous pouvez ajouter le nou-

veau module au serveur, en ajoutant les lignes suivantes à

votre fichier httpd.conf :

LoadModule usertrack_module libexec/mod_usertrack.so

 AddModule mod_usertrack.c

Avec Apache 2.2, il suffira d'ajouter la directive LoadMo-

dule, ici avec modules/ au lieu de libexec/, dans le répe-

rtoire dans lequel sont installés par défaut les modules

chargeables.

Publication de contenu

Par défaut, Apache dessert un contenu à partir du réper-

toire htdocs/ (qui, historiquement, signifie "document

html") dans le répertoire d'installation. Vous pouvez yplacer des documents qui apparaîtront automatiquement

dans l'espace URL du document. Ainsi, par exemple, si

vous créez un répertoire, dans htdocs, nommé foo, et que

vous y placez le fichier bar.html, celui-ci sera accessible

de l'extérieur par l'adresse suivante :

http://www.exemple.com/foo/bar.html

Vous pouvez modifier l'emplacement du répertoire de

documents à l'aide d'une directive DocumentRoot, comme

indiqué. Si un chemin relatif est précisé, il sera considéré

comme étant relatif au chemin spécifié par la directive

ServerRoot.

DocumentRoot /usr/local/apache/htdocs

Page 34: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 34/242

21Publication de contenu

Il n'est pas obligatoire de placer le contenu dans le réper-

toire racine des documents. Apache propose en effet

plusieurs mécanismes puissants et flexibles pour faire

correspondre les URL demandées par les clients avec des

fichiers présents sur des disques ou des ressources fournies

par des modules. Pour plus de détails, consultez le Cha-

pitre 4.

Sections

Les sections, sortes de conteneurs de directives, limitent

la portée d'application des directives. Si les directives ne

se trouvent pas dans une section, cela signifie qu'elles

concernent l'ensemble du serveur par défaut (configu-

ration du serveur) et s'y appliquent :

<Directory "/usr/local/apache/htdocs">

...

</Directory>

<Location "/downloads/*.html">

...

</Location><FilesMatch "\.(gif|jpg)">

...

</FilesMatch>

Page 35: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 35/242

22 CHAPITRE 1 Les bases d'Apache

Sections de directives Apache

par défautLes sections de directives suivantes correspondent aux

sections par défaut utilisées dans les fichiers de configu-

ration Apache :

<VirtualHost>. Directive qui spécifie un serveur vir-

tuel. Sachez qu'il est possible d'héberger différents sites

Web à l'aide d'une seule installation Apache (voir Cha-pitre 5).

<Directory> et <DirectoryMatch>. Ces sections appli-

quent des directives à un répertoire (ou groupe de

répertoires) donné dans le système de fichiers. La sec-

tion <DirectoryMatch> permet d'utiliser des motifs

d'expressions régulières comme arguments.

<Location> et <LocationMatch>. Appliquent des directives

à certaines URL ou à certains motifs d'URL deman-

dés. Elles sont semblables aux sections Directory.

<Files> et <FilesMatch>. Identiques aux conteneurs

Directory et Location, les sections Files appliquent des

directives à certains fichiers ou motifs de fichiers.

Ces sections ne sont pas les seules disponibles. Des

modules, comme mod_proxy, peuvent fournir leurs pro-

pres sections (voir Chapitre 10). Consultez également

le Chapitre 8 pour en savoir plus sur les sections qui

restreignent l'accès en fonction des méthodes http.

Info

Les sections Directory, Files et Location peuvent aussiprendre des expressions régulières comme arguments à con-dition de les faire précéder d'un signe ~. Les expressionsrégulières sont des chaînes qui décrivent un jeu de chaînes ouy correspondent, en fonction de certaines règles de syntaxe.

Page 36: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 36/242

Sections de directives Apache 23

Ainsi, par exemple, l'expression régulière <Files  ~

"\.(gif|jpg)"> concordera avec toutes les requêtes deman-

dant un fichier image dont l'extension est .jpg ou .gif.Toutefois, il vaut mieux les remplacer par les directivesDirectoryMatch, LocationMatch et FilesMatch pour des rai-sons de clarté. Vous en saurez plus sur les expressions réguliè-res en vous rendant à l'adresse http://fr.wikipedia.org/wiki/ Expression_r%C3%A9guli%C3%A8re.

Sections de directivespour l'évaluation conditionnelleApache assure la prise en charge de sections condition-

nelles. Les directives qui y figurent seront traitées uni-

quement si certaines conditions sont remplies :

<IfDefine>. Les directives de cette section seronttraitées si un argument de ligne de commande spécifi-

que est transféré à l'exécutable Apache. Dans l'exemple

suivant, le paramètre de ligne de commande doit

être -DSSL. Vous pouvez également nier l'argument à

l'aide du signe "!", comme dans <IfDefine !SSL>, de

sorte que les directives s'appliquent si l'argument n'est

pas transféré.

<IfModule>. Les directives d'une section IfModule ne

seront traitées que si le module transféré comme argu-

ment est présent dans le serveur Web. Le fichier de

configuration Apache par défaut comprend des exem-

ples de ce type pour différents modules MPM.

Par exemple, dans le fichier httpd.conf, vous verriez :<IfDefine SSL>

LoadModule ssl_module modules/mod_ssl.so

</IfDefine>

que vous activeriez à la ligne de commande, comme ceci :

# httpd –DSSL

Sections de directives Apache

Page 37: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 37/242

Page 38: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 38/242

2

Dépannage

Ce chapitre traite des problèmes les plus communs ren-

contrés lors de l'exécution d'Apache, par exemple au

cours des procédures d'autorisation de fichiers ou lorsqu'il

est impossible d'effectuer une liaison avec un port donné.Nous expliquerons comment les résoudre. Nous explore-

rons d'ailleurs plusieurs outils et ressources disponibles

pour isoler la cause de la plupart des problèmes.

A l'aide ! Mon serveur Apachene fonctionne pas !Quoi de plus frustrant que de ne pas pouvoir avancer sur 

un ouvrage technique à cause d'un logiciel déficient ? Il

n'est pas question que ce soit le cas pour ce livre, bien sûr.

C'est pourquoi nous avons placé ce chapitre vers le début

de l'ouvrage. Il couvre à la fois des sujets de base et des

sujets avancés. N'hésitez donc pas à sauter ce qui ne vous

concerne pas si vous venez tout juste de découvrir Apache !

Page 39: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 39/242

26 CHAPITRE 2 Dépannage

Le journal d'erreurs

Le journal d'erreurs assure le suivi des événements impor-

tants survenant dans la vie du serveur, comme les démar-

rages, redémarrages, avertissements ou erreurs liés à son

fonctionnement, ainsi que les requêtes interdites ou non

valides. C'est le premier endroit où chercher pour résou-dre un problème lié au serveur.

Sur les systèmes UNIX, le fichier error_log est placé par 

défaut dans le répertoire logs/ de votre installation Apache.

Si vous utilisez une installation Apache livrée avec votre

distribution, ce fichier peut se trouver ailleurs, le plus sou-

vent sous /var/log/httpd.

Sous Windows, le fichier est intitulé error.log et se situe

également sous le répertoire logs.

Vous utiliserez la directive ErrorLog pour préciser le che-

min du fichier journal d'erreurs. Préfixez-le avec un tiret,

afin de consigner les erreurs sur l'entrée standard d'un

autre programme. Cette technique est décrite plus endétail au Chapitre 3.

Sachez que le fichier d'erreurs ne sera créé qu'une fois

qu'Apache aura été démarré pour la première fois.

ErrorLog logs/error_log

Page 40: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 40/242

27Connexion au démon du journal système

Connexion au démon du journal

système

Sous UNIX, passez l'argument syslog à ErrorLog, de sorte

qu'Apache utilise le démon du journal système, afin de

consigner les erreurs Apache (comme le montre l'exemple).Vous pouvez, en option, y joindre une facilité (par défaut

local7), comme indiqué. Une facilité syslog est un champ

d'informations associé à un message syslog qui indique la

source du message de journal. Les facilités local0 à local10

sont réservées aux administrateurs et aux applications

comme Apache.

Contrôle de la quantitédes informations consignées

Les informations d'erreur fournies par Apache peuvent

être classées en fonction de leur degré d'importance. La

directive LogLevel, avec l'un des arguments présentés au

Tableau 2.1, permet de choisir les messages à recevoir.

Seules les erreurs de ce niveau d'importance (ou supé-

rieur) seront consignées.

Le niveau d'erreur par défaut, "warn" (avertir), convient

pour la plupart des installations Apache. En revanche, si

vous tentez de dépanner une configuration spécifique, vous

pouvez abaisser le niveau jusqu'à "debug " (déboguer) pour 

obtenir des informations de consignation plus détaillées.

ErrorLog syslogErrorLog syslog:local7

LogLevel notice

Page 41: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 41/242

28 CHAPITRE 2 Dépannage

Tableau 2.1 Options LogLevel telles que décritesdans la documentation Apache

Paramètre Description Exemple

emerg Situation d'urgence,

le système est

inutilisable.

Child cannot open lock file.

Exiting.

alert Une action doitêtre entreprise

immédiatement.

getpwuid: couldn't determineuser name from uid.

crit Conditions critiques. socket: Failed to get a

socket, exiting child.

error Situation d'erreur. Premature end of script

headers.

warn Situation

d'avertissement.

Child process 1234 did not

exit, sending another SIGHUP.

notice Situation normale,

mais méritant d'être

signalée.

info Informatif. Server seems busy, (You may

need to increase StarServers,

or Min/MaxSpareServers)...

debug Messages de

débogage.

Opening config file...

Page 42: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 42/242

29Test de la configuration Apache à la recherche de problèmes

Test de la configuration Apache

à la recherche de problèmes

Cette commande sert à tester le fichier de configuration

Apache, à la recherche de problèmes communs, avant de

l'utiliser sur un serveur en situation réelle. Apache pro-

cède de la même manière pour tester votre configurationchaque fois que vous émettez une commande de redé-

marrage, à l'aide d'apachectl. Vous êtes certain, de cette

manière, qu'un serveur en état de marche pourra redé-

marrer grâce à ce nouveau fichier de configuration.

Test d'Apache à partir de la lignede commande

# apachectl configtest

$ telnet www.apache.org 80Trying 192.87.106.226...Connected to ajax-1.apache.org (192.87.106.226).

Escape character is '^]'.HEAD / HTTP/1.0HTTP/1.1 200 OK Date: Sun, 04 Sep 2005 20:42:02 GMTServer: Apache/2.0.54 (Unix) mod_ssl/2.0.54OpenSSL/0.9.7a DAV/2 SVN/1.2.0-devLast-Modified: Sat, 03 Sep 2005 11:35:42 GMTETag: "203a8-2de2-3ffdc7a6d3f80" Accept-Ranges: bytes

Content-Length: 11746Cache-Control: max-age=86400Expires: Mon, 05 Sep 2005 20:42:02 GMTConnection: closeContent-Type: text/html; charset=ISO-8859-1Connection closed by foreign host.

Page 43: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 43/242

30 CHAPITRE 2 Dépannage

HTTP étant un protocole fondé sur du texte simple, vous

pouvez utiliser un client Telnet (programme permettant

de connecter directement un serveur à un port donné)

pour rechercher la présence d'un serveur Apache actif à

partir de la ligne de commande. Si vous ne recevez pas de

réponse à une requête Telnet distante alors que votre

réseau est correctement configuré, cela signifie qu'Apache

n'écoute pas sur l'adresse et le port en question. Cela peut

être utile pour dépanner un environnement dans lequel iln'existe pas de navigateur Web, comme le cas peut se pré-

senter lorsque vous accédez à un serveur à distance sur 

SSH. Ainsi, si vous pouvez accéder à Apache sur une

machine distante à partir de l'adresse localhost en utilisant

Telnet, mais que vous n'utilisez pas de navigateur à dis-

tance, le problème peut provenir d'un pare-feu ou d'un

paramètre incorrect de la directive Listen d'Apache.

Connectez-vous, via Telnet, à l'adresse www.apache.org

(ou à votre site préféré) sur le port 80, puis tapez :

HEAD / HTTP/1.0

ou

GET / HTTP/1.0

Appuyez deux fois sur la touche Entrée. Vous devriez

recevoir une réponse semblable à celle de l'exemple.

Si un navigateur de ligne de commande Lynx est installé

sur votre système UNIX, vous pouvez obtenir un résultat

analogue en émettant la commande :

lynx –head –dump http://www.apache.org

Le Chapitre 7 traite de mod_ssl et donne une autre

méthode pour se connecter à un serveur Web activé par 

SSL à l'aide de l'outil de ligne de commande openssl.

Page 44: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 44/242

31 Vérification du fonctionnement d'Apache

 Vérification du fonctionnement

d'Apache

Il pourra arriver que vous ne puissiez pas vous connecter 

au serveur. Vous ne serez donc pas en mesure de savoir s'il

fonctionne ou si un problème est survenu sur le réseau.

Les systèmes UNIX proposent plusieurs outils de ligne de

commande pour vous aider ; l'exemple en montre quel-

ques-uns.

L'outil ps indique si le processus httpd fonctionne ou non

sur le système.

Les outils netstat et lsof désignent le port et l'adresse sur 

lesquels le serveur Apache écoute.

ps –aux | grep httpd25297 ? S 0:00 /usr/local/www/bin/httpd -k start15874 ? S 0:06 /usr/local/www/bin/httpd -k start14441 ? S 0:02 /usr/local/www/bin

/httpd -k start.../usr/sbin/lsof | grep httpd |grep IPvhttpd 14441 nobody 3u IPv4 136524TCP www.exemple.com:http (LISTEN)httpd 25297 root 3u IPv4 136524TCP www.exemple.com:http (LISTEN)httpd 30277 nobody 3u IPv4 136524TCP www.exemple.com:http (LISTEN)

...netstat -ltnp Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 192.168.1.151:80 0.0.0.0:* LISTEN 25297/httpdtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1038/sshd

Page 45: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 45/242

32 CHAPITRE 2 Dépannage

Sous Windows, vous pouvez faire appel au Gestionnaire

des tâches (raccourci clavier : Ctrl+Alt+Suppr) pour véri-

fier que le processus Apache.exe fonctionne. Vous pouvez

également utiliser l'application de la barre des tâches figu-

rant dans la plupart des versions récentes pour connaître la

situation d'Apache.

Autres manières d'arrêter Apache

Il peut quelquefois être nécessaire ou pratique d'arrêter le

serveur directement à l'aide de l'utilitaire de ligne de com-

mande kill au lieu d'utiliser le script apachectl. Pour cela, vous devez d'abord trouver l'identifiant du processus

du serveur Apache actif, à l'aide de ps ou de lsof, comme

indiqué. Terminez ensuite le processus à l'aide de l'outil

de ligne de commande kill, en spécifiant le signal à

envoyer comme premier argument, et l'identifiant du

processus du serveur Apache (25 297 dans cet exemple)

comme second argument. HUP servira de signal pour arrê-ter le serveur et SIGHUP pour le redémarrer. Vous pouvez

également remplacer le signal par son équivalent numéri-

que, comme indiqué dans l'exemple. Consultez la page du

manuel traitant de kill pour en savoir plus.

Sous Linux, vous pouvez envoyer un signal à tous les pro-

cessus nommés httpd, avec la commande killall. Vouspouvez, par exemple, arrêter tous les processus httpd en

utilisant ceci :

# killall –HUP httpd

Soyez attentif toutefois : si vous exécutez plusieurs instances

d'Apache, cette commande les arrêtera toutes.

# kill –HUP 25297# kill –9 25297

Page 46: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 46/242

33Utilisation d'Apache… pour déboguer Apache

N'oubliez pas qu'il vous faut disposer des autorisations

appropriées pour que ces commandes fonctionnent. Dans

presque tous les cas, vous devez être superutilisateur ou

propriétaire du processus Apache pour être autorisé à y

mettre fin et à le redémarrer.

Sous Windows, vous pouvez forcer l'arrêt d'Apache en cli-

quant sur le bouton Fin de tâche du Gestionnaire des tâches.

Utilisation d'Apache…pour déboguer ApachePlusieurs modules Apache peuvent vous aider à dépanner 

ou à déboguer une configuration Apache ou une applica-

tion Web.mod_loopback est un outil de débogage de clients Web. Il

renvoie simplement en écho au navigateur tout ce qu'il a

reçu concernant une requête HTTP, notamment des

données POST ou PUT :

http://www.snert.com/Software/mod_loopback/index.shtml

mod_tee et mod_trace_output sont des modules tiers qui

stockent le contenu lorsqu'il est desservi. Ils se trouvent

aux URL suivantes :

http://apache.webthing.com/mod_tee/

http://trace-output.sourceforge.net/

mod_logio, qui est distribué avec Apache 2, envoie toutesles données reçues ou renvoyées par le serveur vers un

 journal d'erreurs à des fins de débogage.

Tous ces modules affectent les performances mais peuvent

se révéler très utiles pour le débogage, par exemple lors-

que des problèmes d'en-tête ou de cookies surviennent.

Page 47: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 47/242

34 CHAPITRE 2 Dépannage

Erreurs de démarrageDe nombreuses causes peuvent empêcher Apache de

démarrer. Dans cette section, nous examinons certains des

problèmes qui peuvent survenir et les erreurs que vous

recevez pour chacun d'entre eux.

Erreur de syntaxe

La commande "PiidFile" n'est pas valide. Elle est peut-être

mal orthographiée ou bien définie par un module qui ne

figure pas dans la configuration du serveur.

Une erreur de syntaxe ("syntax error ") signale soit que vous

avez mal orthographié une directive (ici, PidFile) dans lefichier de configuration, soit que vous avez fait figurer une

ou plusieurs directives utilisées par un module qui n'a pas

été ajouté au serveur. Vérifiez la syntaxe du fichier de con-

figuration, indiquée dans le message d'erreur. Repor-

tez-vous au Chapitre 1 pour en savoir plus sur l'utilisation

d'une directive<ifModule>

, afin d'exclure des directives demanière conditionnelle. Ainsi, le fichier de configuration

pourra être traité, même si un module n'est pas disponible.

Adresse déjà utilisée

Une erreur d'adresse déjà utilisée ("address already in use ")

indique qu'un autre programme emploie le port auquel

Apache tente de se connecter. Pour résoudre le pro-

blème, vous devez soit stopper le programme qui utilise

ce port avant de démarrer Apache soit modifier, dans le

fichier de configuration httpd.conf, le port sur lequel

Syntax error on line xxx of /etc/httpd/httpd.conf:

"Address already in use: make_sock: could not bind to port"

Page 48: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 48/242

35Erreurs de démarrage

Apache écoute les requêtes, en ajustant les valeurs don-

nées après les directives Listen et Port.

Dans la plupart des cas, ce type d'erreur survient quand

un autre serveur Apache fonctionne déjà sur votre sys-

tème. Dans le cas de Windows, cela peut signifier qu'une

instance d'Internet Information Server ou de Microsoft

Personal Web Server s'exécute sur le port sur lequel Apa-

che est configuré. D'autres programmes populaires,

comme Skype, sont aussi connus pour utiliser le port 80à certaines occasions.

Impossible de se connecter au port

Ce type d'erreur indique que vous ne disposez pas des

autorisations nécessaires pour qu'Apache se connecte au

port spécifié dans le fichier de configuration Apache. Sous

UNIX, seuls les utilisateurs disposant de droits peuvent se

connecter aux ports compris entre 1 et 1 024. Pour 

résoudre ce problème, connectez-vous en tant que racine

et émettez la commande su. Ensuite, tentez à nouveau de

démarrer le serveur. Si vous ne disposez pas d'un accès

racine, faites passer, dans votre fichier httpd.conf, le port

utilisé par Apache sur un nombre supérieur à 1 024.

Module non compatible

Une erreur de module non compatible ("module is not com-

 patible ") survient quand Apache tente de charger un module

qui a été compilé pour un serveur plus récent (ou plus

ancien) que celui actuellement installé. Si vous disposez

[Mon Jan 9 20:09:50 2005] [crit] (13)Permissiondenied: make_sock: could not bind to port 80

"module xxx is not compatible with this version of Apache"

Page 49: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 49/242

36 CHAPITRE 2 Dépannage

du source du module, vous pourrez peut-être le recompiler 

à l'aide de votre installation Apache actuelle (voir Chapi-

tre 1). Si vous ne disposez pas du source ou que vous

soyez incapable de recompiler un module dont la fonc-

tionnalité est essentielle pour vous, mettez à niveau (ou

rétrogradez) votre serveur Apache avec une version com-

patible avec le module.

Résolution de nom

Plusieurs directives Apache, notamment ServerName et

Listen, acceptent des noms d'hôtes comme arguments.

Toutefois, si Apache n'est pas capable de résoudre un nom

d'hôte fourni sur une adresse IP au démarrage à l'aide duDNS (service de nom de domaine) de la liste d'hôtes de

votre système, une erreur s'affiche, signalant l'impossibilité

de déterminer le nom d'hôte. Pour résoudre ce problème,

vérifiez votre DNS et les paramètres /etc/hosts, ainsi que

l'orthographe des noms d'hôtes fournis dans httpd.conf.

Chaque fois que cela est possible, utilisez les adresses IP au

lieu des noms d'hôtes pour des directives comme Listen

et <VirtualHost>.

Impossible d'ouvrir un journalou un fichier de configuration

Ce type d'erreur signale que vous ne disposez pas des auto-

risations suffisantes pour lire le ou les fichiers de configu-

ration Apache ou pour écrire dans les fichiers de journal

Apache.

"Cannot determine hostname"

(13)Permission denied: httpd: could not open errorlog file /usr/local/apache/logs/error_log.

Page 50: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 50/242

37Erreurs de refus d'accès

Ce problème survient souvent quand Apache est lancé par 

un utilisateur autre que celui qui l'a construit et installé.

Dans ce cas, démarrez Apache sous l'identité du superutili-

sateur (ou de l'utilisateur) qui l'a installé ou, si vous disposez

des autorisations, employez chmod pour modifier la pro-

priété du fichier nommé dans le message d'erreur.

Erreurs de refus d'accès

Si votre navigateur Web renvoie un message du type "403

Forbidden/Access Denied" lorsque vous tentez de charger 

une page Web via votre serveur Apache, cela signifie quel'URL demandée est soumise à des restrictions d'accès

auxquelles vous ne satisfaites pas. Pour résoudre ce pro-

blème, modifiez les autorisations du contenu Web ou des

fichiers que vous avez demandés. Ensuite, vérifiez que

tous les répertoires menant au document en question sont

accessibles à la fois en lecture et en exécution pour le pro-

priétaire du processus Apache. Sous UNIX, vous pouvezemployer l'utilitaire chmod pour définir ces autorisations.

Le message "Client denied by server configuration" (Client

refusé par la configuration du serveur) peut apparaître

dans le journal des erreurs. Cela signifie que le refus pro-

vient des directives de contrôle d'accès – comme  Allow 

(Autoriser) et Deny (Refuser) – dans les sections <Direc-tory> ou <Location> de cette URL, figurant dans les

fichiers de configuration Apache.

Une déclaration "Directory index forbidden by rule " (Index

de répertoire interdit par la règle) dans le journal des

erreurs signale que vous avez tenté de consulter un réper-

toire dans lequel ne se trouvait aucun fichier d'index.

"Forbidden/You don't have permission to access /xxxon this server"

Page 51: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 51/242

38 CHAPITRE 2 Dépannage

Pour en savoir plus sur l'indexation des répertoires et les

fichiers d'index, consultez l'option Indexes de la directive

Options (voir Chapitre 6).

Options ExecCGI is off in this directory

Quand vous tentez d'exécuter un script CGI, le message

"Options ExecCGI is off in this directory" (Options ExecCGI

désactivées dans ce répertoire) peut s'afficher. Cela signifie

que le CGI n'est pas signalé comme exécutable dans lefichier de configuration Apache ou que les scripts CGI ne

peuvent pas être exécutés à partir du répertoire en ques-

tion. Renseignez-vous sur les directives ScriptAlias ou

Options pour en savoir plus.

Erreurs internes au serveurLes erreurs internes au serveur sont celles qui empêchent

Apache de répondre à une requête.

Erreurs de segmentation

Une erreur de segmentation peut survenir dans les cas sui-

vants : le serveur Apache tente d'accéder à des zones de

mémoire appartenant à d'autres processus système, ou bien

le système rencontre une instruction malformée ou inter-

dite dans le processus Apache. La situation est due soit àun bogue (généralement présent dans des bibliothèques

ou des modules expérimentaux mal écrits), soit à une

panne matérielle (habituellement dans la mémoire, le

chipset, le bus ou le processeur).

"child pid xxx exit signal Segmentation Fault (11)"

Page 52: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 52/242

39Erreurs internes au serveur

Fin prématurée des en-têtes de script

Une erreur "Premature end of script headers" (Fin prématurée

d'en-tête de script) est due à l'exécution incomplète d'un

script CGI. En effet, il faut que le programme CGI dis-

pose des autorisations d'exécution et que l'interpréteur de

la première ligne du script pointe vers le bon programme.

Cette erreur peut apparaître, par exemple, si votre script

affiche #!/usr/local/bin/perl sur sa première ligne alors

que l'interpréteur Perl est situé à /usr/bin/perl.

Ces erreurs sont généralement dues à un arrêt anormal du

programme, avant même que le script n'ait renvoyé des

données. Les pannes peuvent également relever d'autreséléments, notamment des erreurs dans le code ou l'absence

de certaines bibliothèques auxquelles le programme est lié.

Parfois, le système d'exploitation ou Apache peuvent ter-

miner le processus s'il consomme trop de ressources

(mémoire, temps d'unité centrale), comme nous le ver-

rons au Chapitre 9.

En-têtes "mal formés"

Une erreur "en-tête mal formé" apparaît dans un script

lorsque les en-têtes n'ont pas le format approprié (généra-

lement du fait d'une erreur de programmation). Le ser-

veur Apache attend une réponse de script commençant

par zéro, ou plusieurs en-têtes, suivis d'une ligne vide.

[error] [client 192.168.200.3] Premature end ofscript headers: /usr/local/apache/cgi-bin/test-cgi

[error] [client 192.168.200.3] malformed header from script.Bad header=xxx: /usr/local/apache/cgi-bin/exemple.cgi

Page 53: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 53/242

40 CHAPITRE 2 Dépannage

Autres fichiers pour la

 journalisation des erreurs

Plusieurs modules, notamment le module Apache 1.3 SSL,mod_rewrite et mod_cgifournissent leurs propres directives

pour consigner des données spécifiques au module dans

un fichier séparé.

Les redirectionsne fonctionnent pas

Si votre serveur Apache devient inaccessible dès que le

serveur émet une redirection, cela peut être dû au fait que

le nom canonique de votre hôte est inaccessible depuisl'extérieur de votre réseau, ou est incorrect.

Par exemple, un ServerName réglé sur localhost, 127.0.0.1,

ou sur une adresse privée, sera inaccessible si le serveur 

redirige l'utilisateur vers une URL fondée sur ces valeurs.

Pour résoudre ce problème, fournissez un ServerName

valide, ou réglez UseCanonicalName sur "off", de sorte queles URL autoréférentielles se construisent avec le nom

d'hôte fourni par le client. Ce problème survient fré-

quemment sur les machines se trouvant derrière un proxy

inverse (voir Chapitre 10).

RewriteLog /usr/local/apache/logs/rewrite_logRewriteLogLevel warnSSLLog /usr/local/apache/logs/ssl_logSSLLogLevel warnScriptLog logs/cgi_log

UseCanonicalName off

Page 54: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 54/242

41Liste de vérification pour le dépannage

Liste de vérification

pour le dépannageCette section résume certains des problèmes les plus fré-

quents survenant lors du dépannage d'Apache.

Démarrage du serveur

Si vous ne parvenez pas à démarrer le serveur, consultezle journal des erreurs pour obtenir des informations sur les

causes de la panne.

Si un autre serveur fonctionne déjà à cette adresse, optez

pour une combinaison port/adresse différente.

Si vous ne disposez pas des autorisations nécessaires pour 

vous connecter au port demandé, lancez Apache en tantque superutilisateur (racine), de sorte à accéder aux ports

privilégiés. Si Apache ne parvient pas à ouvrir les fichiers

de configuration ou de journal, vérifiez qu'ils appartien-

nent bien à l'utilisateur qui a installé Apache et que

celui-ci possède l'autorisation d'y écrire.

Connexion au serveur

Si vous tentez d'accéder à une page du serveur et qu'elle

ne s'affiche pas, vous devez d'abord déterminer si l'erreur 

provient du serveur, du réseau ou du navigateur.

Vérifiez qu'Apache s'exécute à l'aide de ps, netstat ou du

Gestionnaire de tâches (sous Windows). Il est aussi possi-ble que le serveur ne s'exécute pas du tout.

Vérifiez ensuite que vous pouvez vous connecter à Apa-

che à partir de la machine locale. Pour cela, utilisez Telnet

pour vous connecter directement au serveur et émettre

une requête test. Vérifiez ensuite qu'Apache fonctionne

Page 55: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 55/242

42 CHAPITRE 2 Dépannage

sur la combinaison adresse/port correcte. Si vous pouvez

accéder au serveur au niveau local, mais pas à distance, il

est probable qu'Apache écoute sur une adresse ou un port

locaux qui ne sont pas accessibles à distance. Utilisez nets-

tat ou lsof pour déterminer les adresses sur lesquelles

Apache écoute et vous assurer qu'elles sont correctes.

Vérifiez que votre pare-feu ou votre routeur sont correc-

tement configurés. Si Apache écoute sur l'adresse correcte

mais qu'il soit inaccessible en dehors de votre réseau, il estpossible que le trafic réseau vers votre serveur Apache soit

bloqué. Servez-vous de l'utilitaire traceroute (tracert

sous Windows) pour tester la connectivité du réseau entre

les hôtes en question. De nombreux systèmes d'exploita-

tion empêchent par défaut l'accès depuis l'extérieur,

excepté sur certains ports sélectionnés. Si vous exécutez

Apache sur un port non standard, il y a des chances que

vous vous retrouviez bloqué. La résolution de ce pro-

blème varie selon les distributions. Vous pouvez, par 

exemple, utiliser l'outil system-config-securitylevel sur 

les systèmes Fedora, et l'outil Windows Firewall dans le

Panneau de configuration Windows.

Enfin, si vous utilisez Secure Sockets Layer (SSL) pour accé-der au serveur (voir Chapitre 7) et que vous vous connec-

tez à l'aide de versions plus anciennes du navigateur ou

que vous exécutez des configurations inhabituelles, con-

sultez le journal d'erreurs à la recherche de problèmes liés

au cryptage de données SSL.

Documents introuvables

Si vous parvenez à accéder au serveur mais que vous obte-

nez une erreur de type "Document Not Found " (Document

introuvable), vérifiez que le document existe bien dans le

système de fichiers.

Page 56: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 56/242

43Liste de vérification pour le dépannage

Vérifiez ensuite que la requête a atteint le serveur, en

consultant le fichier  access_log. Si plusieurs instances

d'Apache s'exécutent simultanément, prenez garde à ne

pas vous connecter au mauvais serveur.

Vérifiez ensuite que vos directives Alias pointent vers le

bon endroit, c'est-à-dire l'emplacement où se trouvent

vos documents cibles. Assurez-vous que vous n'avez pas

mal orthographié ou accidentellement supprimé le réper-

toire cible.

Enfin, partez à la recherche des redirections incorrectes.

Vérifiez notamment que les barres obliques de fin sont

bien présentes et testez les problèmes liés à ServerName

décrits plus tôt dans ce chapitre.

Accès interditSi un document existe bel et bien mais que son accès vous

est refusé (" Access Forbidden"), vérifiez quelques points de

base.

Assurez-vous que le propriétaire du processus Apache dis-

pose de l'autorisation de lire le fichier.

Vérifiez que le propriétaire du processus Apache possède

des autorisations de lecture et d'énumération pour tous les

répertoires figurant sur le chemin menant au fichier.

Vérifiez que vous ne tentez pas d'accéder à un répertoire ne

contenant pas de fichier d'index alors que les listings de réper-

toire sont interdits dans le fichier de configuration Apache.

Vérifiez que la requête répond à toutes les exigences sti-

pulées par les directives de contrôle d'accès du fichier de

configuration Apache.

Si vous tentez d'accéder à un script CGI, vérifiez qu'il a

reçu des autorisations en lecture et en exécution.

Page 57: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 57/242

44 CHAPITRE 2 Dépannage

Erreurs internes au serveur

Si vous obtenez une "Internal Server Error " (Erreur interneau serveur) dans votre navigateur lorsque vous tentez de

charger une page du serveur Web, consultez le fichier 

error_log d'Apache pour tenter d'en trouver la cause. Et

posez-vous les questions suivantes :

Tentez-vous d'accéder à un programme CGI ? Possède-t-il

les autorisations de lecture et d'exécution appropriées ? Lechemin vers l'interpréteur à la première ligne du script

est-il correct ? L'interpréteur est-il désigné comme étant

un script CGI par une directive ScriptAlias ou une

directive de même type ?

Si tout le reste a échouéVous avez découvert dans ce chapitre les problèmes les

plus communs rencontrés par les utilisateurs d'Apache. Si

toutefois une erreur non répertoriée ici survient, la pre-

mière chose à faire est de vérifier les journaux d'erreurs.

Si nécessaire, augmentez leLogLevel

du serveur Apachepour trouver des indices sur la nature du problème.

Consultez la documentation Apache, les listes de diffusion

et la base de données des bogues. En dernier ressort, vous

pouvez envoyer votre question à la liste de diffusion des

utilisateurs Apache, à l'adresse suivante :

http://httpd.apache.org/lists.html#http-users

Toutefois, essayez de respecter le "règlement" qui stipule

que vous devez d'abord essayer de trouver vous-même

une solution, puis regrouper suffisamment d'informations

pour que les autres puissent vous aider !

Page 58: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 58/242

3

Journaux et

surveillance

Introduction à la consignationdes erreurs dans ApacheOutre la fonction de consignation des erreurs décrite au

Chapitre 2, Apache propose diverses possibilités pour 

enregistrer des informations concernant tous les aspects

d'une requête. Ce chapitre décrit les problèmes les plus

fréquents survenant lors de la consignation des requêtes :

consignation conditionnelle, rotation des journaux,

résolution des adresses IP et consignation de type " pipe ".

Il traite également de plusieurs modules et utilitaires inté-

grés et tiers, destinés à surveiller la situation de votre ser-

veur Apache et à analyser ses journaux.

Page 59: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 59/242

46 CHAPITRE 3 Journaux et surveillance

Fichiers journaux Apache

par défautApache propose plusieurs fonctions de surveillance et de

consignation qui permettent de s'assurer du bon fonction-

nement du serveur. La configuration par défaut d'Apache

propose deux fichiers journaux, placés dans le répertoire

logs du répertoire d'installation :

b Le fichier  access_log (access.log dans Windows).

Contient des informations sur les requêtes ayant été

desservies par le serveur, comme l'URL demandée ou

l'adresse IP du client, et indique si la requête a réussi

ou a échoué.

b Le fichier  error_log (error.log dans Windows).

Contient des informations liées aux conditions del'erreur, ainsi que différents événements du cycle de

vie du serveur.

Création des formats de journaux

La directive LogFormat permet de signaler à Apache les

aspects de la requête à enregistrer. Des directives supplé-

mentaires sont requises pour indiquer à Apache l'endroit

où ces informations doivent être consignées, mais cela sera

traité à la section suivante. Cet exemple montre la confi-

guration des deux formats les plus populaires, Common

Log Format (Format de journal commun) et Combined Log 

Format (Format de journal combiné). Quand Apache reçoit

une requête, il remplace chacun des champs dont le pré-

fixe est un signe % par l'attribut de requête correspondant.

LogFormat "%h %l %u %t \"%r\" %>s %b" commonLogFormat "%h %l %u %t \"%r\" %>s %b"\"%{Referer}i\" \"%{User-agent}i\"" combined

Page 60: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 60/242

47Création des formats de journaux

Si vous utilisez CLF (Combined Log Format ), chaque

entrée de votre fichier journal ressemblera à ceci :

192.168.200.4 - utilisateur [12/Jun/2005:08:33:34

+0500] "GET /exemple.png HTTP/1.0" 200 1234

Si vous employez le format commun combiné, chaque

entrée de votre fichier journal ressemblera à ceci :

192.168.200.4 – utilisateur [12/Jun/2005:08:33:34

+0500] "GET /exemple.png HTTP/1.0" 200 1234http://www.exemple.com/index.html "Mozilla/5.0

(Windows; U; Windows NT 5.1; en-US; rv:1.7.7)"

Voici la description des champs les plus importants :

b %h. L'adresse IP du client qui a envoyé la requête au

serveur Web, ou le nom d'hôte du client si vous avez

activé HostNameLookups (192.168.200.4 dans cetexemple).

b %u. L'identifiant de l'utilisateur qui a envoyé la requête

déterminée par l'authentification HTTP (utilisateur

dans cet exemple). Consultez le Chapitre 6 pour en

savoir plus sur la configuration de l'authentification

fondée sur HTTP.b %t. L'heure à laquelle la requête est parvenue au

serveur.

b %r. Le texte de la ligne de requête initiale du client

comprenant la méthode HTTP utilisée, la ressource

demandée et la version du protocole HTTP employée

par le navigateur du client ("GET /exemple.pngHTTP/1.0" ici).

b %>s. Le code de statut de la requête HTTP finale que

le serveur Web envoie au client (200 dans cet exem-

ple, ce qui signifie que la requête s'est terminée avec

succès).

Page 61: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 61/242

48 CHAPITRE 3 Journaux et surveillance

b %b. La taille, en octets, de l'objet envoyé au client en

réponse à la requête, en excluant les en-têtes de

réponse (1234 dans cet exemple).

Le format de journal combiné contient deux champs de

plus que le format de journal commun :

b %{Referer}i. L'en-tête de la requête HTTP Referer,

c'est-à-dire la page Web qui a fait référence au docu-

ment actuel (http://www.exemple.com/index.htmldans cet exemple).

b %{User-agent}i. L'en-tête de la requête HTTP

User-agent. Il contient des informations sur le naviga-

teur du client ("Mozilla/5.0 (Windows; U; Windows NT

5.1; en-US; rv:1.7.7)" dans cet exemple).

Création d'un fichier journalpersonnalisé

Vous pouvez créer de nouveaux fichiers journaux, en

complément de ceux proposés dans Apache. Cet exemple

utilise CustomLog pour créer un nouveau fichier journal et

stocker les informations d'un fichier journal précédem-

ment défini appelé common (vu à la section précédente).

Vous pouvez remplacer le nom par la définition du format

elle-même. Une directive supplémentaire plus simple,

TransferLog, extraira simplement la définition fournie par 

la dernière directive LogFormat.

CustomLog logs/access_log commonTransferLog logs/sample.log

Page 62: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 62/242

49Redirection des journaux vers un programme externe

Redirection des journaux

vers un programme externe

Vous pouvez également utiliser CustomLog ou TransferLog

pour rediriger (" pipe ") le résultat du journal vers un pro-

gramme externe plutôt que vers un fichier. Pour cela,

commencez par le caractère  pipe ("|"), suivi du cheminvers le programme qui recevra les informations de journal

sur son entrée standard. Cet exemple met en œuvre le pro-

gramme rotatelogs, livré avec Apache (qui sera décrit dans

une section ultérieure).

Lorsque vous employez un programme externe, il s'exécute

sous le nom de l'utilisateur qui a démarré httpd. Il s'agit dela racine si le serveur a été démarré par la racine ; assu-

rez-vous que le programme est sécurisé. De même, lorsque

vous entrez un chemin de fichier sur des plates- formes dif-

férentes d'UNIX, prenez soin de n'employer que des barres

obliques (même si les barres obliques inversées sont autori-

sées). D'une façon générale, il est conseillé de toujours uti-

liser des barres obliques dans les fichiers de configuration.

Consignation conditionnellede requêtes

Vous pouvez décider de consigner une requête selon qu'il

existe ou non une variable d'environnement. Cette varia-

ble peut avoir été précédemment définie en fonction de

TransferLog "|bin/rotatelogs /var/logs/apachelog 86400"

SetEnvIf Request_URI "(\.gif|\.jpg)$" imageCustomLog logs/access_log common env=!imageSetEnvIf Remote_Addr 192\.168\.200\.5 specialmachineCustomLog logs/special_access_log common env=specialmachine

Page 63: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 63/242

50 CHAPITRE 3 Journaux et surveillance

plusieurs paramètres, notamment l'adresse IP du client ou

la présence d'un en-tête donné dans la requête. Nous le

voyons dans l'exemple, la directive CustomLog peut accep-

ter une variable d'environnement comme troisième argu-

ment. L'entrée ne sera consignée que si la variable existe.

Si la variable d'environnement est niée par un préfixe "!",

l'entrée ne sera consignée que dans le cas où la variable est

absente . L'exemple montre comment éviter de consigner 

des images aux formats GIF et JPEG, et comment consi-gner des requêtes d'une adresse IP particulière dans un

fichier journal séparé. Consultez la section suivante pour 

en découvrir un autre exemple.

Surveillance des personnesse connectant à votre site

Pour surveiller les personnes qui se connectent à votre

site Web, vous pouvez consigner l'en-tête Referer: de la

requête. Cet en-tête contient l'URL pointant vers la

page demandée. Même s'il n'est pas toujours présent ni

précis, il fonctionne dans la majorité des cas. Cet exem-

ple montre comment utiliser une variable d'environne-

ment pour consigner les informations de la référence

(referrer) dans un fichier séparé. Dans ce cas particulier,nous souhaitons simplement consigner les références

externes, et non celles provenant d'une page Web interne.

Pour cela, nous vérifions ici que la référence correspond

à notre propre domaine.

SetEnvIfNoCase Referer www\.exemple\.com internalreferralLogFormat "%{Referer}i -> %U" refererCustomLog logs/referer.log referer env=!internalreferral

Page 64: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 64/242

51Surveillance d'Apache avec mod_status

Surveillance d'Apache

avec mo d_status

Le module mod_status fournit à l'administrateur des

informations sur l'activité et les performances du ser-

veur. Une page HTML s'affiche, proposant les statisti-

ques du serveur sous une forme facilement lisible (le

nombre de workers répondant à des requêtes, le nombre

de workers inactifs, l'heure à laquelle le serveur a été

démarré ou redémarré, etc.).

La directive ExtendedStatus On permet d'obtenir d'autres

informations, par exemple la situation de chaque worker,

le nombre total d'accès, les requêtes actuelles traitées, etc.

N'oubliez pas que cet enregistrement de statistiques sup-

plémentaires peut considérablement ralentir le serveur.

Cet exemple montre comment activer la surveillance

mod_status, tout en limitant l'accès aux informations à cer-

taines adresses IP uniquement. Vous pouvez alors accéder 

aux statistiques du serveur à l'aide d'un navigateur Web, en

vous rendant sur la page http://www.exemple.com/

server-status.

<Location /server-status>SetHandler server-statusOrder Deny,AllowDeny from all Allow from 192.168.0</Location>

Page 65: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 65/242

52 CHAPITRE 3 Journaux et surveillance

Surveillance d'Apache avec SNMPIl existe deux modules Open Source qui ajoutent des

fonctionnalités SNMP (Simple Network Management Proto-

col ) au serveur Web Apache. Ce protocole sert souvent à

gérer les serveurs réseau et l'équipement d'une console

centrale, comme HP OpenView et Tivoli. Le module

permet de surveiller facilement les performances d'Apache

en temps réel, notamment le temps de fonctionnement duserveur, la charge moyenne, le nombre d'erreurs sur une

période donnée, le nombre d'octets et de requêtes desser-

vis, ainsi que de nombreux autres paramètres. Les modu-

les SNMP peuvent aussi générer des alarmes lorsque l'on

atteint un certain seuil ou une condition d'erreur, par 

exemple en cas d'augmentation soudaine du nombre

simultané de connexions client.

Pour Apache 1.3, vous pouvez utiliser  mod_snmp, qui se

trouve à l'adresse http://www.mod-snmp.com/. Ce

module prend en charge SNMP versions 1 et 2. Il nécessite

un correctif sur le cœur ("core ") d'Apache.

Pour Apache 2, il existe un module analogue, appelé

mod_apache_snmp. Vous le trouverez à l'adresse http://www.mod-apache-snmp.sourceforge.net/. Il prend

en charge les versions 1, 2 et 3 du protocole SNMP et

peut être compilé sous forme de DSO, sans qu'il soit

besoin de placer un correctif sur Apache.

Plusieurs outils et structures Open Source permettent de

gérer les ressources SNMP. Voyez notamment ceux quise trouvent aux adresses http://www.net-snmp.org,

OpenNMS (http://www.opennms.org) et Nagios

(http://www.nagios.org).

Page 66: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 66/242

53Analyse des journaux à l'aide d'outils Open Source

Analyse des journaux

à l'aide d'outils Open SourceIl existe plusieurs outils commerciaux et Open Source

permettant de traiter et d'afficher les données du journal.

Ils procèdent souvent de cette manière : ils extraient un

fichier journal, analysent son contenu, puis créent une

série de pages Web présentant les statistiques pertinentes.

Voici quelques applications très connues, disponibles gra-

tuitement et en Open Source, pour analyser les journaux :

b Webalizer (http://www.mrunix.net/webalizer/) ;

b AWStats (http://awstats.sf.net).

D'autres outils permettent de traiter les journaux plus en

détail, par exemple en affichant visuellement le cheminemprunté par vos visiteurs :

b Visitors (http://www.hping.org/visitors/) ;

b Pathalizer (http://pathalizer.bzzt.net/).

Surveillance de vos journauxen temps réelEn plus de mod_status et des divers modules SNMP

décrits précédemment, un outil de ligne de commande,

dénommé apachetop, peut être téléchargé à l'adresse

http://clueful.shagged.org/apachetop.

Il fonctionne à la manière de l'outil de ligne de commande

top d'UNIX. Cependant, au lieu d'afficher la situation du

système d'exploitation, il montre celle du serveur Web en

temps réel.

Page 67: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 67/242

54 CHAPITRE 3 Journaux et surveillance

Si vous exécutez Apache sur un système UNIX et que

vous disposiez d'un site Web connaissant peu de trafic,

l'utilitaire de ligne de commande tail suffit pour sur-

veiller les entrées de vos journaux d'accès et d'erreurs,

mais de manière rudimentaire et en temps réel :

tail -f fichierjournal

D'autres programmes permettent d'identifier rapidement

les problèmes en analysant les journaux d'erreur, à larecherche d'erreurs spécifiques, de requêtes mal formées,

etc., puis de les signaler :

b Logscan (http://www.garand.net/security.php) ;

b ScanErrLog (http://www.librelogiciel.com/soft-

ware).

Consignation des requêtesdans une base de donnéesApache ne dispose pas d'outils permettant de consigner 

des informations vers des bases de données, mais il existe

quelques scripts et modules tiers :

b mod_log_sql vous permet de consigner des requêtes

directement dans une base de données MySQL. Vous le

trouverez à l'adresse http://www.outoforder.cc/

projects/apache/mod_log_sql/.

b Vous pouvez ensuite interroger la base de données à

l'aide de l'outil LogView SQL d'Apache (http://

freshmeat.net/projects/apachelogviewsql/).

b pglogd collecte les journaux et conserve les entrées dans

une base de données PostgreSQL. Vous le trouverez à

l'adresse http://www.digitalstratum.com/pglogd/.

Page 68: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 68/242

55Rotation et archivage des journaux

Rotation et archivage des journaux

Si votre site Web fait l'objet d'un trafic important, vos

fichiers journaux vont grossir. Vous pouvez bien sûr les

archiver manuellement. Cependant, vous disposez de

plusieurs mécanismes permettant de procéder à une rota-

tion périodique, d'archiver et de compresser les anciens journaux à intervalles définis.

Pour éviter d'arrêter ou redémarrer le serveur lorsque

vous manipulez les fichiers journaux, vous pouvez utiliser 

un programme intermédiaire qui consignera les requêtes.

Il se chargera ensuite de la rotation, de la compression et

de l'archivage des journaux.

Pour cela, Apache propose l'outil rotatelogs. Vous trou-

verez un programme analogue à l'adresse http://crono-

log.org/.

Cet exemple fait appel à l'outil rotatelogs pour créer un

nouveau fichier journal et déplacer quotidiennement le

 journal actuel vers le répertoire /var/logs (il y a 86 400secondes dans une journée). Consultez la documentation

Apache pour en savoir plus sur l'utilisation de rotatelogs

et la façon de procéder à la rotation des journaux, en

fonction de la taille et du nom des fichiers archivés en se

basant sur un modèle.

Attention

Si le chemin pointant vers le programme de rotation des jour-naux comprend des espaces, vous devrez peut-être les annuleren les faisant préfixer par une barre oblique inversée (\). Celaest particulièrement courant sous Windows.

CustomLog "|bin/rotatelogs /var/logs/apachelog86400" common

Page 69: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 69/242

56 CHAPITRE 3 Journaux et surveillance

Contrôle de la résolution

des adresses IP

Si la directive HostNameLookups est réglée sur on, Apache

tente de déterminer (résoudre) le nom d'hôte correspon-

dant à l'adresse IP du client lorsqu'il consigne la requête.

Avec HostNameLookups réglé sur off, une entrée access_log

peut ressembler à ceci :

192.168.200.4 – utilisateur [12/Jun/2005:08:33:34

+0500] "GET /exemple.png HTTP/1.0" 200 1234

Si la directive est réglée sur on, cette même entrée ressem-

blera à ceci :unit12.exemple.com - utilisateur [12/Jun/2005:08:33:34

+0500] "GET /exemple.png HTTP/1.0" 200 1234

La section suivante explique le processus inverse,

c'est-à-dire comment remplacer des adresses IP dans des

 journaux par des noms d'hôtes.

Traitement d'adresses IPconsignées

Régler HostNameLookups sur on peut avoir un effet sur les

performances du serveur, notamment en allongeant les

délais de réponse. Pour éviter d'utiliser ce paramètre, vous

pouvez désactiver la résolution des noms et adopter un

utilitaire de post-traitement indépendant, capable d'analyser 

les fichiers journaux et de remplacer les adresses IP par des

HostNameLookups on

$ logresolve < access_log > resolved_log

Page 70: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 70/242

57Redémarrage automatique d'Apache en cas de panne

noms d'hôtes. Ces outils sont plus efficaces, car ils placent

les résultats en cache et n'entraînent pas de délais lors de la

réponse aux requêtes des clients.

Apache propose un outil de ce type, intitulé logresolve

(logresolve.exe dans Windows), qui lit les entrées du

 journal à partir de l'entrée standard et produit le résultat

inverse sur la sortie standard. Pour lire de et vers un

fichier, vous pouvez utiliser la redirection, sous UNIX et

Windows, comme indiqué dans l'exemple.

N'oubliez pas que le résultat d'une résolution d'adresse IP

ne correspondra pas toujours au nom de l'hôte qui a

véritablement envoyé la requête. Ainsi, par exemple, s'il

existe un proxy ou une passerelle entre le client et le ser-

veur Web, l'adresse IP signalée par HostNameLookups ou

logresolve correspondra à l'adresse IP du proxy ou de lapasserelle. Vous obtiendrez alors le nom d'hôte du serveur 

proxy ou du bloc IP géré par la passerelle, plutôt que le

nom d'un hôte réel.

Redémarrage automatiqued'Apache en cas de panne

Si vous installez Apache sous Windows sous forme de ser-

vice, sachez que vous pouvez le redémarrer automatique-

ment, en cas de panne, à l'aide du gestionnaire de services.

Sous UNIX, vous pouvez installer cette fonctionnalité

au moyen d'un script de surveillance ("watchdog ", ou chien

de garde) qui contrôle le statut d'un autre programme.

#!/bin/bashif [ `ps -waux | grep -v grep | grep -c httpd` -lt 1 ];then apachectl restart; fi

Page 71: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 71/242

58 CHAPITRE 3 Journaux et surveillance

Si, pour quelque raison que ce soit, le programme s'arrête

le script de surveillance le redémarre. L'exemple montre

un simple script Linux qui surveille la liste des processus

système, afin de s'assurer qu'il existe un processus httpd ;

en cas d'arrêt, un redémarrage est effectué. Pour l'utiliser,

vous devez lui attribuer des autorisations d'exécution, puis

l'ajouter à votre configuration cron de sorte qu'il soit exé-

cuté à intervalles prédéfinis.

Sous Solaris, utilisez ps -ef au lieu de ps -waux.

Vous trouverez à l'URL http://perl.apache.org/docs/

general/control/control.html un script de surveillance

plus sophistiqué, capable d'envoyer un e-mail lorsque le

serveur est tombé et de surveiller les identifiants de proces-

sus httpd spécifiques.

La plupart des distributions de Linux comprennent égale-ment leur propre script de surveillance générique, pouvant

être adapté à Apache.

Fusion et séparation de fichiers

 journauxLorsqu'une grappe de serveurs Web dessert un même

contenu, il est souvent nécessaire de fusionner tous les jour-

naux de tous les serveurs en un seul fichier journal avant de

le transférer aux outils d'analyse. De même, si un seul ser-

veur Apache gère plusieurs hôtes virtuels, il faut parfois

diviser un fichier journal en plusieurs fichiers différents, unpour chaque hôte virtuel. Cela peut être réalisé au niveau

du serveur Web (nous le verrons à la section suivante) ou

par un post-traitement du fichier journal. Apache 1.3 et 2.x

sont livrés avec un fichier de script de prise en charge,

nommé split-logfile. Celui-ci se trouve dans le réper-

toiresupport/

de la distribution de la source Apache.

Page 72: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 72/242

59Conservation de fichiers séparés pour chaque hôte virtuel

Le projet logtool propose une suite d'outils de manipula-

tion des journaux, qui se trouve à l'adresse http://www

.coker.com.au/logtools/.

L'outil vlogger permet de séparer un flux de journal en

plusieurs fichiers journaux spécifiques à un hôte virtuel,

ainsi que de remplacer des outils comme cronolog (nous

l'avons fait à la section précédente). Il se trouve à l'adresse

http://n0rp.chemlab.org/vlogger/.

Conservation de fichiers séparéspour chaque hôte virtuel

Vous pouvez conserver des journaux d'accès séparés pour 

chaque hôte virtuel, à l'aide d'une directive CustomLog

insérée dans une section <VirtualHost> (nous le voyonsdans l'exemple).

Vous pouvez aussi choisir de consigner les opérations de

tous les hôtes virtuels dans le fichier  access_log défini

dans le contexte du serveur global :

LogFormat "%v %h %l %u %t \"%r\" %>s %b"

common_virtualhostCustomLog logs/access_log common_virtualhost

%v consignera le nom de l'hôte virtuel qui dessert la

requête.

Vous pouvez ensuite utiliser les outils décrits à la section

précédente pour traiter le fichier journal de résultat,

notamment si vous disposez d'un grand nombre d'hôtesvirtuels.

<VirtualHost 192.168.200.3>

ServerName vhost1.exemple.comCustomLog logs/vhost1.exemple.com_log combinedErrorLog logs/vhost2.exemple.com_log.......</Virtual Host>

Page 73: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 73/242

60 CHAPITRE 3 Journaux et surveillance

Si vous ne voulez pas assurer le suivi des opérations d'un

hôte particulier, vous pouvez simplement employer :

CustomLog /dev/null

Entrées de journaux communesEn plus des informations indiquées au Chapitre 2, cette

section décrit plusieurs entrées de journal relatives à cer-taines erreurs communes pouvant apparaître lorsque vous

consultez vos fichiers journaux. La plupart peuvent être

ignorées sans problème.

Fichier favicon.ico introuvable

(File favicon.ico Not Found)La plupart des navigateurs Web récents acceptent l'affi-

chage d'une icône personnalisée près de la barre d'empla-

cement du navigateur ou lors du stockage d'un signet.

Pour cela, le navigateur exige un fichier spécifique du site

Web (favicon.ico). Si ce fichier n'existe pas, il renvoie

une erreur. Vous en saurez plus sur cette icône en vousreportant au Chapitre 1.

Fichier robots.txt introuvable(File robots.txt Not Found)

Le fichier robots.txt est nécessaire à certains program-

mes, comme les outils de téléchargement automatiqueet les robots Web, lorsqu'ils accèdent à votre site Web.

Ces programmes analysent les sites Web, en suivant et en

téléchargeant tous les liens qu'ils trouvent de manière

récursive. Ils sont souvent associés à des moteurs de recher-

che. Leur principal objectif est de stocker et d'indexer le

contenu récupéré. Si le fichier robots.txt

est absent, uneerreur de ce type est renvoyée.

Page 74: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 74/242

61Entrées de journaux communes

httpd.pid écrasé (httpd.pid Overwritten)

Sous UNIX, le fichier httpd.pid contient le PID (identi-fiant de processus) du processus Apache en cours d'exécu-

tion. Il est créé au démarrage d'Apache et supprimé à sa

fermeture. Si Apache n'est pas correctement fermé (par 

exemple si le serveur a dû être arrêté manuellement), ou

en cas d'erreur, le fichier n'est pas supprimé. Il subsistera

donc au prochain démarrage du serveur et cette erreur sera renvoyée.

Requêtes "longues et étranges"

Il est possible que vous rencontriez des requêtes étranges,

comme celle-ci, dans votre journal d'erreurs :

"SEARCH /\x90\x02\xb1\x02\xb1\x02\xb1\x02 ..."

"GET /scripts/..%252f../winnt/system32/cmd.exe?/

c+dir HTTP/1.0..."

"GET /default.ida?NNNNNNN NNNNNNNNNNNNNNNNNN ..."

Ou encore des requêtes de fichiers exécutables qui n'exis-

tent pas sur votre site, comme cmd.exe, root.exe, dir, etc.

Certaines entrées de journal naissent de tentatives auto-matisées pour exploiter les vulnérabilités des serveurs

Web. Par chance, la plupart étant générées par des vers ou

d'autres applications malveillantes spécifiques à Microsoft

Internet Information Server sous Windows, Apache n'en

est pas affecté. Toutefois, de temps en temps, des défauts

sont découverts dans Apache ; cela peut le rendre vulné-rable à des attaques distantes. Il est donc recommandé

d'actualiser votre serveur Apache (voir Chapitre 6).

Page 75: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 75/242

Page 76: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 76/242

4

Mappage d'URL et

contenu dynamique

Mappage d'URLCe chapitre explique comment configurer Apache pour 

mapper (mettre en correspondance) des requêtes avec des

fichiers et des répertoires, ou les rediriger vers des pages

ou des serveurs spécifiques. Ces informations sont utiles

pour résoudre des problèmes habituels, par exemple :

continuer à travailler avec des URL lorsque la structuredu site change, traiter les sites Web sensibles à la casse,

prendre en charge plusieurs langues, etc. Nous explique-

rons également comment utiliser le CGI et les fonction-

nalités SSI présentes dans Apache de manière à fournir un

contenu généré de manière dynamique.

Page 77: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 77/242

64 CHAPITRE 4 Mappage d'URL et contenu dynamique

Mappage d'URL et de fichiers

avec Alias 

Il n'est pas nécessaire que la structure d'un site Web cor-

responde à la disposition des fichiers sur disque. En effet,

la directive Alias permet d'effectuer la correspondance

entre des répertoires sur disque et des URL spécifiques.Grâce à cette directive, une requête pour  http://www

.exemple.com/icons/image.gif amène Apache à recher-

cher le fichier du répertoire /usr/local/apache2/icons/

image.gif (au lieu de la racine des documents par défaut

dans /usr/local/apache2/htdocs/icons/image.gif).

Attention, les barres obliques de fin de la directive Aliassont importantes. Si vous les incluez, la requête client doit

également les faire figurer, faute de quoi la directive n'aura

aucun effet. Par exemple, si vous utilisez la directive sui-

vante :

 Alias /icons/ /usr/local/apache2/icons/

et que vous demandez http://www.exemple.com/icons, leserveur renverra une erreur "404 Document Not Found ".

Mappage de motifs d'URLà des fichiers avec AliasMatch

La directive AliasMatch présente un comportement ana-

logue à Alias, mais elle permet de préciser une expression

régulière pour l'URL. Les correspondances peuvent être

 Alias /icons/ /usr/local/apache2/icons/

 AliasMatch ̂ /(docs|help) /usr/local/apache/htdocs/manual

Page 78: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 78/242

65Redirection d'une page vers un autre emplacement

remplacées dans le chemin de destination. Par exemple,

cette directive désignera n'importe quelle URL sous

/help ou /docs pointant vers les chemins du système de

fichiers du répertoire manual. Les expressions régulières

sont des chaînes permettant de décrire un jeu de chaînes

ou qui concordent avec lui, et ce en fonction de certaines

règles de syntaxe. Vous en saurez plus sur les expressions

régulières à l'adresse http://fr.wikipedia.org/wiki/

 Expression_r%C3%A9guli%C3%A8re.

Redirection d'une pagevers un autre emplacement

La structure d'un site Web ordinaire change avec le temps.

Vous ne pouvez pas toujours contrôler la manière dont les

autres sites se lient au vôtre, par exemple en ce qui con-

cerne les moteurs de recherche présentant des liens cassés.

Pour éviter les erreurs lorsque des personnes accèdent àvotre site Web à l'aide de liens anciens, vous pouvez confi-

gurer Apache avec la directive Redirect qui redirige ces

requêtes vers la ressource correcte, qu'elle se trouve sur le

serveur actuel ou un autre. Même si la directive Redirect

peut prendre des arguments optionnels indiquant le type

de redirection (temporaire ou permanente), la syntaxe la

plus commune consiste à fournir une URL d'origine etune URL de destination. L'URL de destination peut se

trouver sur le même serveur Web ou pointer vers un ser-

veur différent. Dans cet exemple, une requête pour 

http://www.exemple.com/news/today/index.html sera redi-

rigée vers http://news.exemple.com/today/index.html.

Redirect /news http://news.exemple.comRedirect /latest /3.0

Page 79: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 79/242

66 CHAPITRE 4 Mappage d'URL et contenu dynamique

Redirection vers la dernière

version d'un fichier

La directive RedirectMatch est identique à Redirect, mais

elle permet d'utiliser une expression régulière comme

chemin de l'URL d'origine. Cela apporte beaucoup plusde flexibilité. Prenons l'exemple d'un éditeur de logiciels

qui distribue des téléchargements sur son site Web et

publie les nouvelles versions d'un produit au fil du temps.

Il peut arriver qu'un certain pourcentage d'utilisateurs

continuent à télécharger d'anciennes versions du logiciel

sur des sites Web tiers n'ayant pas encore mis à jour leurs

liens. Grâce à RedirectMatch, ces utilisateurs peuventêtre facilement redirigés vers la version la plus récente.

Supposons que le nom de la dernière version du fichier 

téléchargeable soit myapp-3.0. Cet exemple redirige les

requêtes pour http://www.exemple.com/myapp-2.5.1-demo.tgz

vers http://www.exemple.com/myapp-3.0-demo.tgz et les

requêtes pour http://www.exemple.com/myapp-1.2-manual.pdf vers http://www.exemple.com/myapp-3.0-manual.pdf.

Les trois premiers éléments de l'expression régulière cor-

respondront au numéro principal et au numéro secon-

daire, puis à un numéro de correctif optionnel. Ceux-ci

seront remplacés par 3.0. Le reste du nom du fichier est

extrait du dernier groupe de l'expression régulière et rem-

placé dans l'URL de destination.

RedirectMatch myapp-(1|2)\.([0-9])(\.[0-9])?-(.*)/myapp-3.0-$4

Page 80: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 80/242

67Echec de la redirection ou requêtes non autorisées

Echec de la redirection

ou requêtes non autorisées

Si vous gérez un site Web populaire ou complexe, quelles

que soient les précautions prises, vous allez recevoir plu-

sieurs requêtes d'URL concernant des documents non

valides ou qui n'existent plus. Même si nombre d'entreelles peuvent être traitées en faisant bon usage des Redi-

rect, certaines se termineront tout de même par la terrible

réponse "404 Document Not Found ". Il peut donc être sou-

haitable de modifier la page d'erreur par défaut d'Apache

et de diriger vos utilisateurs vers un emplacement particu-

lier sur votre site Web. Il peut s'agir d'une page qui aide

vos visiteurs à trouver la ressource demandée, d'une page

de recherche ou d'une carte du site (comme on le voit

dans l'exemple). Dans une note, le Chapitre 6 propose des

informations complémentaires sur la personnalisation

des pages de refus d'accès.

Définition des gestionnairesde contenu

Les gestionnaires permettent à Apache de déterminer les

actions à réaliser sur le contenu demandé. Ce sont les

modules qui proposent des gestionnaires ; Apache doit

ErrorDocument 404 /search.html

 AddHandler cgi-script .pl .cgi<Location "/cgi-bin/*.pl">Options +ExecCGI

SetHandler cgi-script</Location>

Page 81: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 81/242

68 CHAPITRE 4 Mappage d'URL et contenu dynamique

être configuré pour associer un contenu à des gestionnai-

res spécifiques. Cette fonctionnalité est souvent annexée

aux modules de génération de contenu, comme PHP et

mod_cgi. L'exemple montre comment associer le gestion-

naire cgi-handler aux fichiers que vous souhaitez exécuter 

sous forme de CGI.

La directive AddHandler associe un gestionnaire à certaines

extensions de noms de fichiers. RemoveHandler peut servir 

à supprimer des associations préalables. Dans cet exemple, AddHandler indique à Apache de traiter tous les docu-

ments présentant des extensions cgi ou pl comme des

scripts CGI.

La directive SetHandler permet d'associer un gestionnaire

à tous les fichiers d'un répertoire ou d'un emplacement

particulier. La directive Action, que vous verrez plus loindans ce chapitre, associe un type MIME ou un gestion-

naire particulier à un script CGI.

Les types MIME

MIME est un ensemble de normes qui définissent, entreautres choses, un moyen d'indiquer le type de contenu

d'un document. Des exemples de types MIME sont

text/html et audio/mpeg. Le premier composant du type

MIME correspond à la catégorie principale du contenu

(texte, son, image, vidéo) et le second au type spécifique.

Apache utilise les types MIME, d'une part pour déter-miner ceux des modules ou des filtres qui traiteront un

certain contenu, d'autre part pour ajouter des en-têtes

HTTP à la réponse, afin d'identifier son type de contenu.

Ces en-têtes serviront à l'application cliente pour identi-

fier et afficher correctement le contenu à destination de

l'utilisateur final.

Page 82: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 82/242

69Configuration des types MIME

Configuration des types MIME

Comme pour les gestionnaires de contenu, les types

MIME peuvent être associés à certaines extensions de

fichiers ou URL. Cet exemple montre comment associer le type MIME text/xml aux fichiers se terminant par .xml

et .schema et au contenu de l'URL /xml -schemas/. Par 

défaut, Apache contient un fichier mime.types qui com-

prend les types MIME les plus communs et leurs exten-

sions associées.

Les bases de l'exécutiondes scripts CGICGI signifie Common Gateway Interface (interface de passe-

relle commune). Il s'agit d'un protocole standard utilisé

par les serveurs Web pour communiquer avec des pro-grammes externes. Le serveur Web fournit toutes les

informations nécessaires sur la requête à un programme

externe, qui la traite et renvoie une réponse. La réponse

est alors envoyée au client. CGI ayant été le premier 

mécanisme à générer un contenu unique pour chaque

requête à la volée ("contenu dynamique"), il est pris en

charge par la quasi-totalité des serveurs Web. Apache

accepte les CGI, grâce au module Apache mod_cgi

(mod_cgid lors de l'exécution d'un serveur Apache avec

des threads).

 AddType text/xml .xml .schema<Location /xml-schemas/>ForceType text/xml</Location>

Page 83: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 83/242

70 CHAPITRE 4 Mappage d'URL et contenu dynamique

Attention !

Des programmes CGI d'exemple ou mal écrits peuvent consti-tuer un risque pour la sécurité. Si vous n'utilisez pas cettefonctionnalité, il est recommandé de la désactiver globalement(voir Chapitre 6).

Désignation de ressourcescomme des CGI exécutables

Cette section présente plusieurs manières d'indiquer à

Apache que le fichier cible d'une requête particulière est

un script CGI. Cela est nécessaire pour éviter qu'Apachen'envoie directement le contenu d'un fichier au client,

mais renvoie plutôt le résultat de son exécution.

La directive ScriptAlias est semblable à la directive

 Alias (décrite plus tôt dans ce chapitre), à la seule diffé-

rence qu'Apache traite chaque fichier du répertoire cible

comme étant un script CGI. De même, vous pouvez uti-

liser n'importe laquelle des sections <Files>, <Location> et

<Directory> en combinaison avec la directive SetHandler

pour indiquer à Apache que le contenu de ces sections

constitue des programmes CGI. Dans ce cas, vous devrez

également fournir une directive Options +ExecCGI pour 

indiquer à Apache que l'exécution du CGI est autorisée.

L'exemple suivant demande à Apache de considérer tou-tes les URL se terminant par une extension de fichier .pl

comme des scripts CGI :

<Location "/cgi-bin/*.pl">

Options +ExecCGI

SetHandler cgi-script

</Location>

ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin

Page 84: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 84/242

71Association de scripts à des méthodes HTTP et des types MIME

Association de scripts à des

méthodes HTTP et des types MIME

Outre les directives mentionnées dans la section précé-

dente, Apache en propose certaines qui simplifient l'asso-

ciation de types MIME spécifiques, d'extensions de

fichiers, voire de méthodes HTTP spécifiques, à un CGI

particulier. Le module mod_actions, qui figure dans la dis-

tribution de base et qui est compilé par défaut, propose les

directives Action et Script, présentées dans cet exemple :

b La directive  Action accepte deux arguments. Le

premier est un gestionnaire ou un type de contenu

MIME ; le second pointe vers le programme CGI

pour gérer la requête.

b La directive Script associe certaines méthodes de

requête HTTP à un programme CGI.

Les informations concernant le document demandé sont

transmises au CGI par les variables d'environnement

PATH_INFO (URL de document) et PATH_TRANSLATED (che-

min de document).

Comme dans l'exemple de la section précédente, le réper-toire contenant le CGI de destination doit être désigné

comme autorisant l'exécution de CGI avec une directive

ScriptAlias ou le paramètre ExecCGI de la directive Options.

# Traitement de toutes les images GIF via un script CGI# avant de les servir Action image/gif /cgi-bin/filter.cgi# Association de méthodes HTTP spécifiques à un script# CGIScript PUT /cgi-bin/upload.cgi

Page 85: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 85/242

72 CHAPITRE 4 Mappage d'URL et contenu dynamique

Dépannage relatif à l'exécution

des scripts CGI

En plus des modules et des techniques présentés aux Cha-

pitres 2 et 3, il est à noter que le module mod_cgi propose

la directive ScriptLog pour aider au débogage des scripts

CGI. S'il est activé, il conservera des informations pour chaque échec d'exécution CGI, notamment les en-têtes

HTTP, les variables POST, etc. Le fichier peut rapide-

ment grossir, mais vous pouvez en limiter la taille grâce

aux directives ScriptLogBuffer et ScriptLogLength.

Amélioration des performancesdu script CGIL'un des principaux inconvénients du développement de

CGI réside dans l'impact qu'il a sur les performances, en

plus de la nécessité de démarrer et d'arrêter des program-

mes à chaque requête. mod_perl et FastCGI sont deuxsolutions à ce problème. Tous deux exigent toutefois un

examen minutieux du code existant. En effet, vous ne

pourrez plus supposer que les ressources seront automati-

quement libérées par le système d'exploitation après que la

requête aura été desservie.

mod_perl est un module, disponible pour Apache 1.3et 2.0. Il intègre un interpréteur Perl dans le serveur Web

Apache. En plus d'une API puissante pour les éléments

internes à Apache, mod_perl bénéficie d'un mode de com-

patibilité CGI, dans lequel les CGI Perl existants peuvent

ScriptLog logs/cgi_log

Page 86: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 86/242

73SSI

s'exécuter avec peu, voire pas, de modification. Les scripts

s'exécutant à l'intérieur d'un interpréteur qui persiste dans

le processus, aucune pénalité n'est appliquée au démarrage.

FastCGI est un standard qui permet à une même instance

d'un programme CGI de répondre à plusieurs requêtes au

fil du temps. Vous trouverez les spécifications et pourrez

télécharger les modules pour Apache 1.3 et 2.x à l'adresse

http://www.fastcgi.com. FastCGI a regagné de la popu-

larité après avoir été utilisé dans les structures de dévelop-pement Web comme Ruby-on-Rails.

SSI

SSI est une technologie Web simple, de la "vieille école",

un prédécesseur d'autres langages intégrés HTML, commePHP. SSI fournit un mécanisme simple et efficace pour 

ajouter facilement des éléments de contenu dynamique, par 

exemple un pied de page commun à chaque page indi-

quant la date et l'heure auxquelles la page a été servie. Autre

exemple, la distribution Apache 2.0 utilise SSI pour per-

sonnaliser les messages d'erreur. SSI fonctionne en inté-

grant des instructions de traitement spécifiques dans despages Web et en les évaluant avant que le contenu ne soit

renvoyé au client. Vous en saurez plus sur la prise en charge

de SSI par Apache à l'adresse http://httpd.apache.org/

docs/2.0/howto/ssi.html.

Document on diskThis document, <!--#echo var="DOCUMENT_NAME" -->,was last modified <!--#echo var="LAST_MODIFIED" -->Content received by the browserThis document, sample.shtml,was last modified Sunday, 14-Sep-2005 12:03:20 PST

Page 87: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 87/242

74 CHAPITRE 4 Mappage d'URL et contenu dynamique

Configuration de SSI

La fonctionnalité SSI est apportée par le module

mod_include, distribué avec Apache. La manière la plus

simple de le configurer consiste à associer une extension

au gestionnaire de contenu server-parsed, comme indi-

qué dans l'exemple.

Paramétrage des variablesd'environnement

Les variables d'environnement sont des variables qui peu-

vent être partagées entre des modules et qui sont éga-

lement disponibles pour des processus externes, comme

les CGI et les documents SSI. Les variables d'environne-ment peuvent également être utilisées pour la communi-

cation entre modules et pour baliser certaines requêtes à

des fins de traitement spécifique.

Vous pouvez paramétrer les variables d'environnement à

l'aide de la directive SetEnv. Ainsi, les variables seront dis-

ponibles pour les scripts CGI et les pages SSI et pourront

être consignées ou ajoutées à un en-tête. Par exemple :

SetEnv foo bar

créera la variable d'environnement foo et lui affectera la

valeur bar.

 AddType text/html .shtml AddHandler server-parsed .shtml

SetEnv foo barUnSetEnv fooPassEnv foo

Page 88: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 88/242

75Paramétrage dynamique des variables d'environnement

A l'inverse, vous pouvez supprimer des variables spécifi-

ques, à l'aide de la directive UnsetEnv.

Enfin, la directive PassEnv permet d'exposer des variables

à partir de l'environnement de traitement du serveur. Par 

exemple :

PassEnv LD_LIBRARY_PATH

mettra la variable d'environnement LD_LIBRARY_PATH à

disposition des scripts CGI et des pages SSI. Cette variablecontient un chemin vers des bibliothèques dynamiques

chargeables dans certains systèmes UNIX, comme Linux.

Accès à une variable d'environnement

Pour accéder à une variable d'environnement nommée foo

dans une page SSI, tapez :

<!--#echo var="foo" -->

Sa valeur peut être consignée avec l'option de mise en forme%{foo}e (voir Chapitre 3) ou ajoutée à un en-tête HTTP (voirChapitre 10), avec :

RequestHeader set X-Foo "%{foo}e"

Paramétrage dynamiquedes variables d'environnement

La directive SetEnvIf permet de paramétrer des variables

d'environnement en fonction des informations de la

requête, comme le nom d'utilisateur, le fichier demandé

ou une valeur d'en-tête HTTP spécifique.

SetEnvIf HTTP_USER_AGENT MSIE iexplorerSetEnvIf HTTP_USER_AGENT MSIE iexplorer=foo

SetEnvIf HTTP_USER_AGENT MSIE !JavaScript

Page 89: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 89/242

76 CHAPITRE 4 Mappage d'URL et contenu dynamique

Cette directive prend un paramètre de requête, une

expression régulière et un ensemble de variables, qui

sera modifié si le paramètre correspond à l'expression.

Cet exemple concerne les navigateurs Microsoft Internet

Explorer. Il montre comment paramétrer une variable, lui

affecter une valeur arbitraire foo et même lui affecter une

expression de négation.

Par la suite, vous pourrez rechercher l'existence et la

valeur de cette variable pour réaliser diverses actions,comme la consignation d'une requête spécifique ou l'envoi

d'un contenu différent en fonction du type de navigateur.

Il est possible, par exemple, d'envoyer des pages HTML

simplifiées à des navigateurs texte, comme Lynx, ou à des

navigateurs sur téléphones portables et assistants personnels.

En réalité, la recherche de l'agent utilisateur du client esttellement commune que le module mod_setenvif propose

la directive BrowserMatch, qui permet d'écrire simplement :

BrowserMatch MSIE iexplorer=1

Info

SetEnvIf et BrowserMatch proposent des versions non sensiblesà la casse (SetEnvIfNoCase et BrowserMatchNoCase) qui peuventêtre utilisées pour simplifier les expressions régulières danscertaines situations.

 Variables d'environnementspéciales

Apache propose un ensemble de variables d'environnement

spéciales. Si l'une d'elles est définie, Apache modifie son

comportement. Elles servent généralement à passer outre

BrowserMatch "Mozilla/2" nokeepalive

Page 90: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 90/242

77Négociation du contenu

des clients qui présentent des bogues. Par exemple, la

variable nokeepalive désactive la prise en charge du main-

tien en activité dans Apache, qui réduit les performances

du serveur (plusieurs requêtes ne pouvant pas être transmi-

ses sur la même connexion). De fait, elle ne doit être para-

métrée que lorsque la requête est réalisée par un client qui

ne prend pas correctement en charge cette fonctionnalité,

généralement à l'aide de l'une des directives BrowserMatch

ou SetEnvIf, comme on le voit dans l'exemple.Les Chapitres 7 et 8 proposent des exemples de variables

spéciales utilisées pour contourner des problèmes dans les

implémentations SSL et DAV.

Négociation du contenu

Le protocole HTTP propose des mécanismes permettant

de conserver différentes versions d'une ressource donnée et

de renvoyer le contenu approprié en fonction des capacitéset des préférences du client. Par exemple, un client peut

vous informer qu'il est capable d'accepter un contenu

compressé (même si sa langue de préférence est l'anglais, il

comprendra également les pages écrites en espagnol). Les

trois principaux aspects négociés sont les suivants :

b Le codage. Il s'agit du format dans lequel uneressource est conservée ou représentée. Il peut géné-

ralement être déterminé à partir de l'extension du

fichier. Ainsi, le fichier  listing.txt.gz possède un

type MIME text/plain et un codage gzip. Le codage

de la ressource sera annexé à l'en-tête Content-Enco-

ding: de la réponse.

 AddCharset UTF-8 .utf8 AddLanguage en .en AddEncoding gzip .gzip .gz

Page 91: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 91/242

78 CHAPITRE 4 Mappage d'URL et contenu dynamique

b Le jeu de caractères. Cette propriété décrit le jeu de

caractères utilisé par un document. Le jeu de caractè-

res de la ressource sera annexé à l'en-tête Content-Type:

de la réponse, avec le type MIME.

b La langue. Vous pouvez proposer différentes versions

de la même ressource. Par exemple, la documentation

Apache propose index.html.en, index.html.es, index

.html.de, etc. La langue de la ressource sera annexée

à l'en-tête Content-Language: de la réponse.

L'exemple montre comment associer des jeux de caractè-

res, des langues et des codages à des extensions de fichiers

particulières.

Configuration de la négociationdu contenu

Il existe deux méthodes principales pour configurer lanégociation du contenu dans Apache : le mode Multi-

views et les correspondances de type (type maps).

Le mode Multiviews peut être activé en ajoutant une

directive Options +Multiviews à une configuration. Nous

déconseillons cette méthode, excepté pour les sites Web

simples, car elle n'est pas très efficace. En effet, pour cha-

que requête, elle analyse le répertoire contenant le fichier,

à la recherche de documents analogues contenant d'autres

extensions. Elle construit alors une liste de ces fichiers et

utilise des extensions pour déterminer le codage du con-

tenu et le jeu de caractères, puis pour renvoyer le contenu

approprié.

Options +Multiviews AddHandler type-map .var

Page 92: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 92/242

79Configuration de la négociation du contenu

Il vaut mieux employer les correspondances de type, qui

limitent les recherches sur le système de fichiers. Il s'agit de

fichiers spéciaux qui mettent en correspondance les noms

de fichiers et les informations (métadonnées) les concer-

nant. Vous pouvez configurer une correspondance de type

pour une ressource donnée en créant un fichier portant le

même nom et l'extension .var, puis en ajoutant une direc-

tive AddHandler (comme indiqué dans la configuration

d'exemple).Le fichier peut contenir plusieurs entrées. Chacune com-

mence par URI: (c'est-à-dire le nom du document, suivi de

plusieurs attributs comme Content-Type:, Content-Lan-

guage: et Content-Encoding:). Le Listing 4.1 montre un

exemple de fichiers de correspondance de type.

Listing 4.1 Contenu d'un fichier de correspondance de type

URI: page.html.en

Content-type: text/html

Content-language: en

URI: page.html.fr

Content-type: text/html; charset=iso-8859-2Content-language: fr

Astuce

N'oubliez pas que l'utilisation d'un type de négociation decontenu affecte les performances du serveur Web, car cela

nécessite des accès supplémentaires au système de fichiers.

Page 93: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 93/242

80 CHAPITRE 4 Mappage d'URL et contenu dynamique

Affectation de jeux de caractères

par défaut et de priorités delangue

Il est possible de désigner un jeu de caractères par défautpour les documents n'en disposant pas, à l'aide de AddDe-

faultCharset, comme indiqué dans l'exemple. Une autre

option consiste à spécifier  AddDefaultCharset Off pour 

désactiver l'ajout d'un jeu de caractères aux documents

qui n'en possèdent pas.

Vous pouvez également choisir une langue par défautgrâce à la directive DefaultLanguage. Pour un site Web en

anglais, le paramètre serait en, comme indiqué dans

l'exemple.

Enfin, si le client n'adopte aucune préférence de langue,

vous pouvez utiliser  LanguagePriority pour déterminer 

l'ordre de préférence des langues. Dans cet exemple, si un

document en anglais est trouvé, il sera envoyé ; sinon,

Apache recherchera un document en espagnol. S'il n'en

trouve pas, il recherchera un document en allemand.

Vous en saurez plus sur ce sujet en vous rendant aux adres-

ses suivantes : http://httpd.apache.org/docs/2.0/mode

/mod_negotiation.html et http://httpd.apache.org

/docs/2.0/mod/mod_mime.html.

DefaultLanguage en AddDefaultCharset iso-8859-1LanguagePriority en es de

Page 94: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 94/242

81Mappage avancé d'URL avec mod_rewrite

Mappage avancé d'URL

avec mod_rewrite Apache propose un module très puissant, mod_rewrite,

qui permet de manipuler les URL de manière quasi illi-

mitée à l'aide des expressions régulières. Du fait de sa

complexité, ce module ne sera pas traité dans cet ouvrage

autrement que dans une référence spécifique ou dans des

exemples d'autres chapitres. Il est mentionné ici pour information, au cas où vous atteigniez un jour les limites

des directives Redirect, ErrorDocument et Alias.

Vous en saurez plus sur  mod_rewrite en vous rendant

à l'adresse http://httpd.apache.org/docs/2.0/mod/

mod_rewrite.html.

Problème de l'oubli de la barreoblique finale

Certaines URL ne peuvent fonctionner que si elles possè-

dent une barre oblique de fin. Cette situation apparaît si

vous ne chargez pas mod_dir dans le serveur ou lorsque

les redirections réalisées par mod_dir ne fonctionnent pas

correctement avec la valeur spécifiée dans la directive

ServerName, comme expliqué dans la section "Les redirec-

tions ne fonctionnent pas", au Chapitre 2.N'oubliez pas, lorsque vous accédez à certaines URL cor-

respondant à des répertoires, d'ajouter une barre obli-

que ("/") à la fin de l'URL. Le répertoire peut contenir 

DirectorySlash On

Page 95: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 95/242

82 CHAPITRE 4 Mappage d'URL et contenu dynamique

un fichier d'index ou un index de répertoire. Cet oubli est

une erreur courante. Ainsi, quand mod_dir "imagine" que

cela peut être le cas, il procède à la redirection appropriée.

Par exemple, si mod_dir est activé sur le serveur et que

vous disposez d'un répertoire nommé foo sous la racine de

document, une requête pour  http://exemple.com/foo

sera redirigée vers http://exemple.com/foo/.

Il s'agit du comportement par défaut sous Apache 1.3

et 2.0 lorsque mod_dir est chargé dans le serveur. Sous

Apache 2, vous pouvez désactiver cette redirection, à

l'aide d'une directive DirectorySlash :

DirectorySlash Off

Correction des fautes de frappe

mod_speling est un module Apache qui reconnaît les

URL mal orthographiées et redirige l'utilisateur vers

l'emplacement correct du document. mod_speling est

capable de corriger les URL dont la casse est erronée ou

dont une lettre manque (ou est incorrecte). Cela est très

fréquent lorsque les utilisateurs tapent l'URL dans le navi-

gateur.

Par exemple, supposons qu'un utilisateur demande le

fichier  file.html mais que celui-ci ne soit pas présent.

mod_speling recherche alors un document analogue(comme FILE.HTML, file.htm, etc.) et le renvoie s'il le

trouve. Cela affecte les performances, mais peut être assez

utile, et évite les requêtes vers des liens cassés.

CheckSpelling on

Page 96: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 96/242

83Résolution des problèmes de casse

Pour activer la vérification orthographique, vous pouvez

ajouter CheckSpelling on à votre configuration Apache,

comme indiqué dans l'exemple.

Info

S'il existe plusieurs documents ressemblant à une adresse malorthographiée, le module en renvoie une liste. Attention, tou-tefois ! Cela pourrait présenter des risques pour la sécurité, ces

fichiers ne pouvant pas tous être proposés au public.

Résolution des problèmes de casse

Windows possède un système de fichiers non sensible à

la casse, à la différence de la plate-forme UNIX. Cela

crée généralement des problèmes lors de la migration de

sites Web entre les deux systèmes. Des URL, comme

http://www.exemple.com/images/icon.PNG, qui

fonctionnaient bien sous Windows, commencent à ren-

voyer des erreurs du type "Document Not Found ". Eneffet, le fichier sur disque s'intitule icon.png et n'est pas

équivalent, sous UNIX, au fichier icon.PNG demandé. Ce

problème peut être résolu en vérifiant et en réécrivant

manuellement chaque lien, ou en activant le module

mod_speling, comme indiqué à la section précédente.

Il existe également un autre module, à objectif unique,pouvant être utilisé dans ce but : mod_nocase. Ce module,

initialement fondé sur  mod_speling, crée une requête

GET pour des URL non sensibles à la casse. Il recherche

une correspondance exacte ; s'il ne la trouve pas, il tente

NoCase on

Page 97: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 97/242

84 CHAPITRE 4 Mappage d'URL et contenu dynamique

une correspondance non sensible à la casse. Si plusieurs

fichiers correspondent à la recherche non sensible à la

casse, le premier est automatiquement sélectionné. Pour 

activer mod_nocase, vous devez le charger dans le serveur 

et inclure une directive NoCase dans votre fichier de confi-

guration Apache, comme indiqué dans l'exemple.

mod_nocase peut être téléchargé à l'adresse http://www

.misterblue.com/Software/mod_nocase.htm.

Attention, l'activation de mod_speling ou de mod_nocase

diminue les performances du serveur.

 Validation de pages avec Tidy 

Indépendamment du fait que vous ayez généré vos pages

HTML de manière dynamique ou que vous les ayez

codées à la main, si elles contiennent des erreurs de mar-

quage, il est possible qu'elles ne s'affichent pas correcte-ment dans tous les navigateurs. Tidy est un outil de ligne

de commande utile, capable de traiter les codes HTML et

XML mal formés, de corriger de nombreuses erreurs

communes et de produire une sortie conforme aux stan-

dards. Vous le trouverez à l'adresse http://tidy.source-

forge.net/.

Vous pouvez exécuter Tidy à partir de la ligne de com-

mande sur des fichiers statiques, grâce à mod_tidy et à

l'architecture de filtre Apache 2, le contenu traité étant

desservi à la volée. Cet exemple montre, d'une part,

comment utiliser la directive SetFilter pour associer un

filtre Tidy à des fichiers XML et HTML, et d'autre part

 AddOutputFilterByType TIDY text/html application/xhtml+xmlTidyOption char-encoding utf8

Page 98: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 98/242

85 Validation de pages avec Tidy

comment employer TidyOption pour configurer le com-

portement du moteur Tidy. L'architecture de filtre et la

configuration d'Apache sont décrites au Chapitre 11.

Vous pouvez télécharger  mod_tidy à l'adresse http://

home.snafu.de/tusk/mod_tidy/ .

Un autre module d'Apache 2, mod_validator, peut être

téléchargé à l'adresse http://www.webthing.com/

software/mod_validator/.

Page 99: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 99/242

Page 100: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 100/242

5Hébergement

 virtuel

Ce chapitre explique comment héberger plusieurs sites

Web grâce à une seule instance du serveur Apache, en

utilisant à la fois un hébergement virtuel fondé sur le nom

et un hébergement virtuel fondé sur l'adresse IP. Il traite

également de sujets liés à l'hébergement de plusieurs utili-

sateurs, par exemple avec les répertoires d'accueil et les

fichiers de configuration par répertoire.

Définition de l'hébergementvirtuelL'hébergement virtuel est une fonction que proposent la

plupart des serveurs Web modernes. Cela permet de des-

servir des sites Web variés, chacun étant identifié par un

ou plusieurs domaines, à l'aide d'une seule instance d'un

serveur. Un autre avantage réside dans la possibilité de

centraliser l'administration et d'optimiser l'utilisation des

Page 101: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 101/242

88 CHAPITRE 5 Hébergement virtuel

ressources du système. De nombreux fournisseurs d'héber-

gement pour des sites Web commerciaux peuvent répon-

dre à des centaines de clients à l'aide d'une seule instance

de serveur, évitant ainsi de gérer des centaines de serveurs

Apache en arrière-plan.

Hébergement virtuel basé sur IP

La manière la plus facile d'assurer un hébergement virtuel

consiste à employer une combinaison adresse IP/port à

laquelle le client se connecte. Apache peut être configurépour accepter un hébergement virtuel basé sur IP à l'aide

des sections <VirtualHost>. Chaque section <Virtual-

Host> contient des directives de configuration qui seront

appliquées aux requêtes envoyées à l'adresse IP (et, en

option, au numéro de port) spécifiée dans la balise

ouvrante. Bien entendu, le serveur Apache qui s'exécute

doit avoir été configuré avec ces adresses IP.

Info

En cas d'écoute sur des ports non standard, n'oubliez pas defournir une directive Listen pour chacun d'entre eux. Attention,il ne suffit pas qu'ils soient listés dans la section <VirtualHost>

pour qu'Apache écoute leurs requêtes.

L'hébergement virtuel basé sur IP présente toutefois

l'inconvénient de devoir affecter une adresse IP différente

à chaque hôte virtuel.

<VirtualHost 192.168.200.4:80>(…)</VirtualHost>

Page 102: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 102/242

89Configuration de l'hébergement virtuel basé sur IP

Configuration de l'hébergement

virtuel basé sur IPL'exemple du Listing 5.1 montre trois hôtes virtuels

basés sur IP, desservant un contenu pour trois sites Web :

www.exemple.com, une version intermédiaire de www.exem-

ple.com et www.exemple.net. La directive ServerName

figurant dans chaque section sert à construire des URL

autoréférentielles. La directive DocumentRoot précisel'emplacement du contenu du site Web pour chaque hôte

virtuel. Il est également possible de consigner les requêtes

et les erreurs pour chaque hôte virtuel dans un fichier dif-

férent. Pour cela, il convient de placer des directives de

consignation, comme TransferLog et ErrorLog, dans la

section d'hôte virtuel (voir Chapitre 3).

Les adresses et les ports répertoriés dans la balise ouvrante

d'une définition <VirtualHost> n'auront pas d'effet sur les

adresses ou les ports qu'écoute Apache. Vous devrez donc

toujours fournir les directives Listen appropriées. Si aucun

port n'est spécifié dans une définition <VirtualHost>,

celui précisé dans la directive Apache la plus récente sera

utilisé. Il est également possible de préciser un caractère joker ("*") pour écouter les requêtes dans tous les ports

qu'écoute Apache, comme indiqué dans l'hôte virtuel

exemple.net.

Listing 5.1 Configuration d'hôtes virtuels basés sur IP

Listen 8080Listen 80

<VirtualHost 192.168.200.2>

ServerName www.exemple.com

DocumentRoot /usr/local/Apache/sites/exemple.com

</VirtualHost>

Page 103: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 103/242

90 CHAPITRE 5 Hébergement virtuel

<VirtualHost 192.168.200.2:8080>

ServerName www.exemple.com

DocumentRoot /usr/local/Apache/sites/staging

</VirtualHost>

<VirtualHost 192.168.200.4:*>

ServerName www.exemple.net

DocumentRoot /usr/local/Apache/sites/exemple.net

</VirtualHost>

Hébergement virtuel basésur le nomNous l'avons vu, l'hébergement virtuel IP nécessite une

adresse IP différente pour chaque site Web. Cela génèreun certain nombre de problèmes si vous devez héberger un

grand nombre de sites ou que vous ne puissiez pas ou ne

vouliez pas payer plusieurs adresses IP. Cela sera notam-

ment le cas si vous souhaitez gérer plusieurs sites Web per-

sonnels sur votre propre serveur via une ligne DSL.

L'hébergement virtuel basé sur le nom est utile car la plu-part des navigateurs réputés (et la quasi-totalité des navi-

gateurs récents) transmettent un en-tête Host: dans leur 

requête HTTP. C'est une exigence du protocole

HTTP/1.1, mais cela apparaît également dans la plupart

des implémentations de HTTP/1.0. Il est ainsi possible

de choisir les informations à présenter à l'utilisateur en

fonction des données de la requête HTTP, plutôt que

d'afficher les données de la connexion elle-même. Cela

permet à plusieurs hôtes virtuels de partager la même

combinaison adresse IP/port.

Page 104: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 104/242

91Configuration de l'hébergement virtuel basé sur le nom

Configuration de l'hébergement

virtuel basé sur le nomLa configuration des hôtes virtuels par noms est semblable

à celle des hôtes virtuels IP. L'exemple du Listing 5.2

montre deux hôtes virtuels partageant l'adresse IP

192.168.200.2.

Apache déterminera l'hôte virtuel vers lequel"router" la

requête, en fonction de la valeur de l'en-tête Host: de la

requête HTTP. Elle sera comparée, à des fins de corres-

pondance, au nom d'hôte fourni par  ServerName, ainsi

qu'à tous les noms d'hôtes supplémentaires fournis par la

directive ServerAlias, qui sont optionnels.

Listing 5.2 Configuration d'hôte virtuel basée sur le nomListen 80

NameVirtualHost 192.168.200.2

<VirtualHost 192.168.200.2>

ServerName www.exemple.com

ServerAlias exemple.com Web.exemple.com

DocumentRoot /usr/local/Apache/sites/exemple.com

</VirtualHost>

<VirtualHost 192.168.200.2>

ServerName www.exemple.net

DocumentRoot /usr/local/Apache/sites/exemple.net

</VirtualHost>

La directive NameVirtualHost est nécessaire pour indiquer 

à Apache qu'une adresse IP particulière servira pour les

hôtes virtuels basés sur le nom. Vous pouvez indiquer à

Apache d'utiliser n'importe quelle adresse IP disponible

pour l'hébergement virtuel basé sur le nom, avec :

NameVirtualHost *

Page 105: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 105/242

92 CHAPITRE 5 Hébergement virtuel

Bien entendu, vos serveurs DNS doivent être correcte-

ment configurés pour que les domaines www.exemple.com,

exemple.com et Web.exemple.com soient résolus sur l'adresse

192.168.200.2.

Que se passe-t-il si une requête ne

correspond à aucun hôte virtuel ?Si une requête ne correspond à aucun hôte virtuel, elle

sera desservie par le serveur principal dans le cas d'un

hébergement virtuel basé sur IP. Dans le cas d'un héber-

gement virtuel basé sur le nom, c'est le premier hôte vir-

tuel basé sur le nom qui prendra le pas. Consultez les deux

sections suivantes pour en savoir plus sur la configuration

d'un hôte virtuel "tous usages" par défaut.

Configurer un hôte virtuel par défaut,basé sur le nom

Nous l'avons indiqué dans la section précédente, c'est le

premier hôte virtuel présent dans le fichier de configura-

tion qui répond aux requêtes du domaine non explicite-

ment gérées par d'autres hôtes virtuels. Si vous hébergezplusieurs sites, il peut être utile de configurer cet hôte

virtuel. Il renverra ainsi une page proposant une liste des

sites Web disponibles dans la machine, ou bien donnera

les raisons pour lesquelles ce site Web particulier n'est

pas reconnu. Pour cela, vous pouvez placer ce fichier 

(default.html, dans l'exemple du Listing 5.3) à la racine

NameVirtualHost *

<VirtualHost *>...</VirtualHost>

Page 106: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 106/242

93Que se passe-t-il si une requête ne correspond à aucun hôte virtuel ?

du document, puis rediriger toutes les requêtes qui lui

sont adressées à l'aide d'une directive AliasMatch. Vous

obtiendrez un effet analogue en remplaçant la directive

par une directive ErrorDocument :

ErrorDocument 404 /default.html

Vous pouvez également diriger les utilisateurs vers un

autre de vos sites Web, à l'aide d'une directive Redirect.

Listing 5.3 Configuration d'un hôte virtuel par défaut basésur le nom

NameVirtualHost *

# La section ci-après doit être placée au-dessus de

toute

autre section d'hôte virtuel

<VirtualHost *>

ServerName default.exemple.com

DocumentRoot /usr/local/Apache/sites/default

 AliasMatch /* /default.html

</VirtualHost>

Configurer un hôte virtuel par défautbasé sur IP

La syntaxe spéciale _default_ permet de définir un hôte vir-

tuel qui desservira les requêtes de combinaisons adresse/port

qui ne sont pas traitées par d'autres hôtes virtuels. Vous

pouvez également préciser un numéro de port dans la

combinaison, à l'aide du mot clé _default_ (comme dans

l'exemple suivant, extrait de la configuration mod_ssl par 

<VirtualHost _default_ >ServerName default.exemple.comDocumentRoot /usr/local/Apache/sites/default</VirtualHost>

Page 107: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 107/242

94 CHAPITRE 5 Hébergement virtuel

défaut d'Apache). Cet exemple spécifie un hôte virtuel qui

écoutera les requêtes sur ce port particulier, pour toutes les

adresses qui ne sont pas explicitement gérées par d'autres

hôtes virtuels :

<VirtualHost _default_:443>

SSLEngine on

ServerName secure.exemple.com:443

DocumentRoot /usr/local/Apache/sites/default

...</VirtualHost>

Mélange d'hôtes basés sur IPet basés sur le nomSachez qu'il est également possible de spécifier à la fois

des hôtes virtuels basés sur IP et d'autres basés sur le nom

(voir Listing 5.4). Au lieu d'utiliser  NameVirtualHost  *,

vous devrez fournir des directives NameVirtualHost sépa-

rées pour chaque adresse IP qui sera associée à des hôtes

virtuels basés sur le nom. Cet exemple montre deux

hôtes virtuels basés sur le nom, associés à l'adresse IP192.168.200.2, et un hôte virtuel basé sur IP, associé à

l'adresse IP 192.168.200.4.

Listing 5.4 Mélange d'hôtes basés sur IP et basés sur le nom

NameVirtualHost 192.168.200.2

<VirtualHost 192.168.200.2>

ServerName www.exemple.com

DocumentRoot /usr/local/Apache/sites/exemple.com

</VirtualHost>

<VirtualHost 192.168.200.2>

ServerName staging.exemple.com

DocumentRoot /usr/local/Apache/sites/staging

Page 108: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 108/242

95Débogage des configurations d'hôtes virtuels

</VirtualHost>

<VirtualHost 192.168.200.4>

ServerName www.exemple.net

DocumentRoot /usr/local/Apache/sites/exemple.net

</VirtualHost>

Débogage des configurationsd'hôtes virtuelsVous pouvez appeler le binaire httpd assorti de l'option -S

(voir Listing 5.5) pour qu'Apache analyse le fichier de

configuration. Une fois que toutes les informations liées à

l'hôte virtuel ont été traitées, ile binaire httpd fournit des

informations sur chaque hôte virtuel configuré et chaquevaleur d'hôte par défaut. Il s'agit là d'un outil très pratique

pour déboguer des configurations d'hôtes virtuels com-

plexes.

Listing 5.5 Vérification de la configuration d'un hôte virtuel

# httpd -S

VirtualHost configuration:

wildcard NameVirtualHosts and _default_ servers:

*:* is a NameVirtualHost

default server exemple.com

(/usr/local/www/conf/httpd.conf:1055)

port * namevhost exemple.com

(/usr/local/www/conf/httpd.conf:1055)

port * namevhost exemple.org

(/usr/local/www/conf/httpd.conf:1082)

port * namevhost exemple.net

(/usr/local/www/conf/httpd.conf:1094)

Syntax Ok

Page 109: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 109/242

96 CHAPITRE 5 Hébergement virtuel

Utilisation de SSL avec des hôtes

virtuels basés sur le nomEn bref, SSL ne peut pas être utilisé avec les hôtes virtuels

basés sur le nom, car il n'existe pas aujourd'hui de grand

navigateur capable de le prendre en charge. Repor-

tez-vous à la section du même nom dans le Chapitre 7

pour en savoir plus.

Alternative à l'hébergement virtuel

Pour les utilisateurs qui disposent d'un grand nombre

d'hôtes virtuels, il peut être souhaitable d'adopter une

approche différente d'hébergement. Cela est particuliè-

rement vrai pour les FAI, qui hébergent des milliers de

clients. Dans le cas contraire, ils devront enregistrer des

informations pour chacun des hôtes virtuels dans le fichier 

de configuration, puis redémarrer le serveur à chaquemodification.

mod_virtualhost_alias vous permet de configurer une

racine de document différente pour chaque hôte virtuel,

et ce de manière dynamique. Ainsi, la requête est mise en

correspondance avec un chemin donné dans le système de

fichiers, en fonction des informations de la requête elle-même (comme l'adresse IP ou le nom d'hôte). Cet exemple

met en correspondance les requêtes pour un nom d'hôte

particulier avec un chemin dans le système de fichiers qui

comprend ce nom d'hôte (représenté par %0 dans le che-

min). De même, la directive VirtualScriptAlias permet

d'exécuter des scripts CGI dans un chemin de répertoire

UseCanonicalName OffVirtualDocumentRoot /usr/local/Apache/vhosts/%0VirtualScriptAlias \/usr/local/Apache/vhosts/%0/cgi-bin

Page 110: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 110/242

97Utilisation de SSL avec des hôtes virtuels basés sur le nom

basé sur le nom d'hôte référencé dans la requête. Si un uti-

lisateur envoie une requête pour  /manual/index.html sur 

l'hôte www.exemple.com, cette directive sera mise en corres-

pondance avec /usr/local/Apache/vhosts/www.exemple.com/

manual/index.html.

De la même manière, vous pouvez effectuer la correspon-

dance avec des adresses IP plutôt que les noms d'hôtes,

pour un hébergement virtuel basé sur IP, à l'aide des

directives VirtualDocumentRootIP et VirtualScriptAliasIP.

Vous pouvez choisir de mettre en correspondance des

requêtes en fonction de certaines parties seulement du

nom d'hôte ou de l'adresse IP, ou en fonction du port de

la requête. Pour cela, vous utiliserez différentes séquences

basées sur %, comme %p pour le numéro de port, %1 pour 

la première partie du domaine, %2 pour la deuxième, etainsi de suite.

Autres modules d'hébergement virtuel

Le module mod_vhost_alias est probablement l'un des

plus populaires parmi les hôtes virtuels de masse, du fait

qu'il est intégré dans Apache. Il existe toutefois d'autressolutions, par exemple :

b mod_vhost_ldap. Ce module Apache 2 permet de

stocker des informations d'hôte virtuel dans un réper-

toire LDAP. Il peut être téléchargé à l'adresse http://

alioth.debian.org/projects/modvhostldap/.

b mod_vhost_dbi. Ce module permet de stocker uneconfiguration d'hôte virtuel dans une base de données

SQL, ce qui assure une grande flexibilité. Il s'exécute sur 

Apache 2. Pour le télécharger, rendez-vous à l'adresse

http://www.outforder.cc/projects/Apache/

mod_vhost_dbi/.

Page 111: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 111/242

98 CHAPITRE 5 Hébergement virtuel

Le Chapitre 11 traite de plusieurs modules de multitraite-

ment (MPM), comme mod_perchild, qui permettent

d'exécuter différents hôtes virtuels sous divers identifiants

utilisateur.

Fichiers de configuration par répertoire

L'hébergement de plusieurs sites Web pose un problème

lié, relatif aux services d'hébergement qui concernent plu-

sieurs clients. Si le nombre de clients est important, il est

possible de faire appel à des fichiers de configuration par 

répertoire. Ce sont généralement des fichiers htaccess

(auparavant principalement utilisés pour les tâches de

contrôle d'accès). Lorsque cette fonctionnalité est activée,Apache recherche des fichiers de configuration spéciaux

dans tous les répertoires menant au fichier demandé. Par 

exemple, si Apache reçoit une requête pour /usr/local/

apache2/htdocs/index.html, il recherche les fichiers de

configuration par répertoire dans /, /usr/, /usr/local/,

/usr/local/apache2 et /usr/local/apache2/htdocs, dans

cet ordre.

S'il en trouve, leur contenu est traité et fusionné avec la

configuration principale de httpd.conf au démarrage.

Cela est assez pratique pour l'administrateur système, car 

les utilisateurs peuvent gérer eux-mêmes leurs configura-

tions. De plus, puisque les fichiers sont analysés à la volée,

le serveur n'a pas à être redémarré après chaque modifica-tion. Inconvénient : cette opération pénalise les perfor-

mances. En effet, Apache doit procéder à des opérations

lourdes sur disque pour rechercher ces fichiers dans cha-

que requête, et ce, même si les fichiers n'existent pas.

 AccessFilename .htaccess

Page 112: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 112/242

99Utilisation de SSL avec des hôtes virtuels basés sur le nom

La directive AccessFilename permet de fournir une liste

de noms de fichiers qu'Apache étudiera, à la recherche des

fichiers de configuration par répertoire.

Contrôle de la portée des fichiersde configuration par répertoire

Lorsque .htaccess est présent dans le champ Context: de

la description de la syntaxe de référence de la directive,

que vous trouverez dans la documentation Apache, cela

signifie que la directive peut être placée dans des fichiers

de configuration par répertoire.

La directive AllowOverride permet de contrôler le type dedirectives de configuration pouvant apparaître dans des

fichiers de configuration par répertoire. Vous pouvez, par 

exemple, autoriser les utilisateurs à modifier les directives

d'indexation de répertoire, mais pas celles liées à une

autorisation. Les valeurs possibles sont les suivantes :

b Authconfig. Directives d'autorisation.

b FileInfo. Directives contrôlant les types de docu-

ments.

b Indexes. Directives contrôlant l'indexation du réper-

toire.

b Limit. Directives de contrôle de l'accès à l'hôte.

b Options. Directives contrôlant les fonctions spécifi-ques du répertoire.

b All. Toutes les directives appartenant aux groupes

mentionnés précédemment peuvent être employées.

b None. Désactiver les fichiers de configuration par réper-

toire pour cette arborescence de répertoires.

 AllowOverride Indexes Limit AuthConfig

Page 113: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 113/242

100 CHAPITRE 5 Hébergement virtuel

Désactivation des fichiers de

configuration par répertoire

Si vous n'avez pas l'utilité des fichiers de configuration par 

répertoire, vous pouvez les désactiver à l'aide de la syntaxe

présentée ici. Cela augmentera la sécurité et les perfor-

mances du serveur, aux dépens toutefois de la flexibilité et

de la commodité que ces fichiers procurent.

<Directory /> AllowOverride None</Directory>

Page 114: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 114/242

6

Sécurité et

contrôle d'accès

Le contrôle d'accès, une exigence ?Le contrôle d'accès est une exigence pour de nombreux

sites Web. Cela implique qu'un certain contenu (ou cer-

taines zones) du site Web soit accessible aux clients pro-

venant d'une plage d'adresses particulière, d'une part, et

que ceux-ci fournissent, par exemple, un nom d'utilisa-

teur et un mot de passe valables, d'autre part. Le contrôled'accès peut être implémenté à divers niveaux : notam-

ment celui du système d'exploitation, avec des règles de

filtrage des paquets, et celui de l'application Web, avec des

formulaires, des sessions et des cookies. Ce chapitre traite

exclusivement de l'implémentation du contrôle d'accès,

de l'authentification et de l'autorisation à l'aide des modu-

les Apache intégrés. Il explique également en quoi les dif-

férents paramètres de configuration peuvent affecter la

sécurité de votre serveur et montre plusieurs étapes que

vous pouvez entreprendre pour l'améliorer.

Page 115: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 115/242

102 CHAPITRE 6 Sécurité et contrôle d'accès

Apache propose plusieurs modules permettant de contrô-

ler l'accès au contenu d'un site. Les deux principaux sont

mod_access (qui permet de contrôler l'accès en fonction

de l'adresse IP d'origine et d'autres caractéristiques de la

requête) et mod_auth (qui authentifie les utilisateurs en

fonction d'un nom d'utilisateur et d'un mot de passe).

D'autres modules, moins utilisés, seront également men-

tionnés dans ce chapitre, mais ne seront pas traités en détail.

Différences existantentre les versions d'ApacheLa structure des autorisations et des authentifications

d'Apache a été totalement remaniée dans Apache 2.2.Même si la plupart des modifications ont été apportées au

niveau du code source, plusieurs changements sont visi-

bles pour l'utilisateur.

Pour des raisons de clarté, et parce que la plupart des

concepts de base continuent de s'appliquer, ce chapitre

décrit principalement les configurations Apache 1.3 et

Apache 2.0.

Toutefois, si vous souhaitez connaître les changements spé-

cifiques à la version 2.2, consultez la section "Apache 2.2",

plus loin dans ce chapitre.

L'authentification basique  et digest  L'authentification des utilisateurs d'un site Web sert pour 

des raisons de suivi ou d'autorisation. La spécification HTTP

propose deux mécanismes d'authentification : basique  et

digest .

Page 116: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 116/242

103L'authentification basique et digest

Dans les deux cas, le processus est le suivant :

1. Un client tente d'accéder à un contenu protégé sur leserveur Web.

2. Apache examine si le client fournit un nom d'utilisa-

teur et un mot de passe. Si ce n'est pas le cas, il renvoie

un code de situation "HTTP 401", indiquant que

l'utilisateur doit s'authentifier.

3. Le client lit la réponse et demande à l'utilisateur sonnom et son mot de passe (généralement dans une

fenêtre contextuelle).

4. Le client tente à nouveau d'accéder à la page Web,

cette fois en transmettant le nom d'utilisateur et le mot

de passe dans le cadre de la requête HTTP. Le client

retient le nom d'utilisateur et le mot de passe et les

transmet dans les prochaines requêtes vers le même

site, pour que l'utilisateur n'ait pas besoin de les saisir à

chaque requête.

5. Apache vérifie la validité des informations, puis

accorde ou refuse l'accès selon l'identité de l'utilisateur 

et d'autres règles d'accès.

Dans l'authentification de base, le nom d'utilisateur et le

mot de passe sont transmis en texte clair, dans le cadre des

en-têtes de la requête HTTP. Cette situation implique un

risque pour la sécurité. En effet, une personne mal-

veillante pourrait facilement espionner la conversation

entre le serveur et le navigateur, intercepter le nom d'uti-

lisateur et le mot de passe, et les réutiliser librement par la

suite. L'authentification digest assure un niveau de sécurité

supérieur, car elle ne transmet qu'un résumé (digest ), et

non le mot de passe en clair. Un algorithme digest est une

opération mathématique qui extrait un texte et en ren-

voie un autre qui identifie uniquement le texte d'origine.

Page 117: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 117/242

104 CHAPITRE 6 Sécurité et contrôle d'accès

Si le texte change, le digest change également. Le digest 

est fondé sur une combinaison de plusieurs paramètres,

comme le nom d'utilisateur, le mot de passe et la méthode

de requête. Le serveur peut calculer le digest lui-même et

vérifier que le client connaît le mot de passe, même quand

celui-ci n'est pas transmis sur le réseau.

Malheureusement, même si cette spécification existe

depuis un certain temps, les navigateurs n'acceptent pas

tous l'authentification digest  ou le font de manière noncompatible.

Dans tous les cas, à la fois pour l'authentification basique 

ou digest , les informations demandées sont transmises sans

protection sur le réseau. Pour mieux sécuriser l'accès à

votre site Web, utilisez plutôt SSL (voir Chapitre 7).

Présentation du contrôle d'accèsApache

L'exemple montre un extrait de configuration utilisant un

contrôle d'accès basé sur le nom d'hôte et IP, avec

mod_access. Les directives Allow précisent les adresses IP

individuelles, les réseaux et les noms d'hôtes qui ont accèsau contenu. Les directives Deny précisent celles qui seront

refusées. La directive Order indique la méthode d'évalua-

tion des directives Allow et Deny.

Dans cet exemple, la directive Order Allow,Deny précise

que les directives Allow doivent être évaluées en premier,

et les directives Deny en dernier. Cet ordre est important !

<Directory /usr/local/apache2/htdocs/private>Order Allow, Deny Allow from 192.168.0 exemple.comDeny from guest-terminal.exemple.com</Directory>

Page 118: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 118/242

105Configuration des autorisations et des authentifications Apache

Order  Allow,Deny s'assure que si le client ne correspond

pas à une directive Allow, l'accès lui sera refusé par défaut.

Le fonctionnement du contrôle d'accès peut vous laisser 

perplexe. Ne vous inquiétez pas, il est très facile à maîtri-

ser une fois que vous avez compris comment sont éva-

luées les directives.

Configuration des autorisationset des authentifications Apache

Ce listing présente un extrait de configuration qui protège

un répertoire à l'aide d'un mot de passe. AuthType définit

le type d'authentification : dans ce cas, c'est une authenti-

fication HTTP basique. AuthName associe un texte à la

zone qui sera protégée par le mot de passe. Ce texte sera

présenté à l'utilisateur lorsque le navigateur lui demandera

un mot de passe (généralement dans une fenêtre contex-

tuelle séparée). AuthUserFile pointe vers la base de don-

nées utilisateur. Enfin, la directive Require spécifie un

utilisateur auquel sera accordé un accès en cas d'authenti-

fication réussie.

Les sections suivantes donnent plus de détails sur cetexemple. Vous y trouverez également des instructions

pour créer et manipuler la base de données utilisateur, et

d'autres pour combiner un contrôle d'accès basé sur l'uti-

lisateur et sur IP, comme indiqué à la section "Combinai-

son des méthodes de contrôle d'accès".

<Directory /usr/local/apache2/htdocs/private> AuthType Basic AuthName "Password Protected Area" AuthUserFile /usr/local/apache2/conf/htusers

Require user admin</Directory>

Page 119: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 119/242

106 CHAPITRE 6 Sécurité et contrôle d'accès

Création d'une base de données

utilisateur

Pour créer une base de données utilisateur (aussi appelée

 fichier de mots de passe ), vous pouvez employer l'utilitaire

htpasswd inclus dans Apache. La syntaxe permettant de

créer un nouveau fichier de mots de passe et d'y ajouter un utilisateur sous UNIX est présentée dans l'exemple.

Sous Windows, vous devrez utiliser :

htpasswd.exe -cm file userid

Pour ajouter un nouvel utilisateur à un fichier de mots de

passe existant, voici la syntaxe sous UNIX :

htpasswd file userid

et sous Windows :

htpasswd.exe -m file userid

Vous devrez également faire figurer le mot de passe qui

sera ajouté à la base de données des utilisateurs.

Ne conservez pas le fichier de mots de passe dans un réper-toire accessible par le Web. N'utilisez pas non plus -c

lorsque vous ajoutez des utilisateurs à un fichier existant ;

cela détruirait le contenu précédent.

A titre d'exemple, la ligne suivante crée un fichier de mots

de passe nommé htusers et ajoute un utilisateur nommé

admin :htpasswd -c /usr/local/apache2/conf/htusers admin

htpasswd -c file userid

Page 120: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 120/242

107Emploi de Require pour autoriser des utilisateurs et des groupes

Emploi de Require pour autoriser

des utilisateurs et des groupes

Vous pouvez demander à Apache d'autoriser l'accès à tout

utilisateur valide dans la base de données, qui s'identifie

avec succès, en tapant :

Require valid-user

S'il ne s'agit que d'un certain groupe d'utilisateurs, vouspouvez les répertorier de manière explicite dans les argu-

ments de Require :

Require user idutil1 idutil2

En revanche, si vous disposez d'un grand nombre d'utili-

sateurs, employez la directive AuthGroupFile. Elle pointe

vers un fichier contenant des informations de groupe, auformat suivant :

nomgroupe: idutil1 idutil2 idutil3 [..]

Par exemple :

administrators: admin patron

users: admin patron util1 util2

L'exemple affiché au début de cette section montre un

extrait de configuration qui offre l'accès aux seuls utilisa-

teurs ayant réussi à s'authentifier et appartenant au groupe

administrators. Dans cet exemple, il s'agirait des utilisa-

teurs admin et patron.

<Directory /usr/local/apache2/htdocs/private> AuthType Basic AuthName "Password Protected Area" AuthUserFile /usr/local/apache2/conf/htusers AuthGroupFile /usr/local/apache2/conf/groupsRequire group administrators

</Directory>

Page 121: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 121/242

108 CHAPITRE 6 Sécurité et contrôle d'accès

Gestion d'un grand nombre

d'utilisateurs

Le module mod_auth_dbm équivaut, en termes de fonction-

nalités, à mod_auth, mais il conserve les données utilisateur 

dans une base de données fondée sur un fichier. Cela

accélère la recherche des données lorsqu'il existe un grand

nombre d'utilisateurs. Ce module propose plusieurs direc-tives, comme AuthDBMAuthoritative, AuthDBMUserFile et

 AuthDBMGroupFile, dont la syntaxe et les fonctionnalités

sont équivalentes aux directives en texte brut prévues

par mod_auth. Pour manipuler les fichiers utilisateur et

de groupe, adoptez htdbm et dbmmanage, les contreparties de

l'outil mod_auth. Sachez que les données de groupe et

d'utilisateur peuvent être stockées dans la même base dedonnées, comme indiqué ici.

Autorisation d'accès à des adressesIP spécifiques uniquement

Il est quelquefois souhaitable de limiter l'accès à un certain

contenu (comme le site Web interne d'une entreprise) à

des adresses IP spécifiques, notamment celles provenant

<DirectoryMatch /home/*/public_html> AuthType Basic AuthName "Zone privee" AuthDBMUserFile /usr/local/apache2/conf/dbmusers AuthDBMGroupFile /usr/local/apache2/conf/dbmusers AuthDBMAuthoritative on

Require group student faculty</DirectoryMatch>

<Directory /usr/local/apache2/htdocs/private>Order Allow, Deny Allow from 192.168.0</Directory>

Page 122: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 122/242

109Refuser l'accès à des adresses IP spécifiques

d'un réseau interne. Cet exemple donne accès au répertoire

/usr/local/apache2/htdocs/private et à ses sous-réper-

toires uniquement pour les clients dont les adresses IP

sont comprises dans la plage 192.168.0.1 à 192.168.0.254.

L'argument transmis à la section Directory doit littérale-

ment correspondre au chemin du système de fichiers

qu'utilise Apache pour accéder aux fichiers.

La ligne Order Allow, Deny refuse l'accès par défaut ; seuls

les clients correspondant à la directive Allow se verront

accorder l'accès. La directive Allow peut accepter plusieurs

adresses IP individuelles ou une certaine plage d'adres-

ses IP. Consultez la référence de la directive pour en

savoir plus.

Vous pouvez également autoriser l'accès à quelques adres-

ses IP spécifiques seulement, qui utilisent le même code,dans un fichier .htaccess, à l'adresse /usr/local/apache2/

htdocs/private :

Order Allow,Deny

 Allow from 192.168.0

Refuser l'accès à des adresses IPspécifiques

A l'inverse, il est possible d'autoriser un accès général,

mais avec des restrictions. Vous pouvez, par exemple,

refuser l'accès lorsque la requête provient d'une adresse

figurant dans une plage d'adresses IP spécifiques. Cela

peut servir à bloquer certaines machines ou robots Web

responsables de problèmes ou d'abus de bande passante.

<Directory /usr/local/apache2/htdocs/private>Order Deny,AllowDeny from 192.168.0.2 192.168.0.5

</Directory>

Page 123: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 123/242

110 CHAPITRE 6 Sécurité et contrôle d'accès

Cet exemple autorise l'accès au répertoire /usr/local/

apache2/htdocs/privateet à ses sous-répertoires à n'importe

quelle personne, à l'exception des clients dont les adresses IP

portent les numéros 192.168.0.2 et 192.168.0.5.

 Allow et Deny peuvent également restreindre l'accès selon

qu'il existe ou non une variable d'environnement, comme

expliqué à la section "Restriction d'accès fondée sur le

type du navigateur", plus loin dans ce chapitre.

Le Chapitre 9 propose d'autres manières de restreindre ou

de limiter l'accès aux clients dont le comportement est

inadapté.

Combinaison des méthodesde contrôle d'accès

Vous pouvez associer différentes méthodes de contrôle

d'accès, à l'aide de la directive Satisfy. Par exemple, le

fichier de configuration montré ici nécessite que les utili-

sateurs proviennent d'une adresse interne autorisée OUqu'ils fournissent un nom d'utilisateur et un mot de passe

valables.

Pour limiter l'accès aux utilisateurs provenant d'une adresse

interne spécifique ET fournissant un nom d'utilisateur et

un mot de passe, vous devrez utiliser Satisfy all.

<Location /restricted> Allow from 192.168.200.0/255.255.255.0 AuthType Basic AuthUserFile /usr/local/apache2/conf/htusers AuthName "Ressource restreinte"

 AuthAuthoritative onRequire valid-userSatisfy any</Location>

Page 124: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 124/242

111Personnalisation de la page de refus d'accès

Personnalisation de la page

de refus d'accèsLorsqu'une requête reçoit un refus d'accès du serveur 

Web, l'utilisateur obtient un message d'erreur généré par 

le serveur et codé en dur. Vous pouvez personnaliser ce

message, à l'aide de la directive ErrorDocument, de trois

manières différentes.

Vous pouvez afficher un message personnalisé à l'atten-

tion de l'utilisateur, comme dans les exemples suivants :

Avec Apache 2 :

ErrorDocument 403 "Vous n'êtes pas autorisé à

accéder à ce fichier"

Avec Apache 1.3 (remarquez ici l'absence de guillemetsen fin de chaîne) :

ErrorDocument 403 "Vous n'êtes pas autorisé à

accéder à ce fichier

Vous pouvez également rediriger la requête vers un che-

min d'URL local avec un message personnalisé :

ErrorDocument 401 /login_failed.html

Dans ce cas, le fichier transmis à la directive en second

argument est un chemin commençant par une barre obli-

que (/), relativement à la valeur spécifiée dans la directive

DocumentRoot.

Enfin, vous pouvez rediriger la requête vers une URLexterne :

ErrorDocument 404 http://www.exemple.com/page

_not_found.html

Page 125: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 125/242

112 CHAPITRE 6 Sécurité et contrôle d'accès

Ces exemples font référence à des codes de retour 

400 HTTP différents, ce qui indique qu'une erreur a été

rencontrée lors de la résolution de la requête (par exem-

ple, l'utilisateur n'a pas fourni le nom et le mot de passe

corrects). Vous pouvez bien sûr procéder de la même

manière pour d'autres codes HTTP communs, comme

des erreurs de serveur interne.

InfoCertaines versions de Microsoft Internet Explorer (MSIE) igno-rent par défaut les messages d'erreur générés par le serveurlorsqu'ils font moins de 512 octets. N'oubliez donc pas de spéci-fier un message supérieur à cette valeur. Vous en saurez plus surce problème en vous référant à un article de la base de connais-sances de Microsoft, à l'adresse http://support.microsoft.com/ 

default.aspx?scid=kb;en-us;Q294807.

Donner le pouvoir aux utilisateursSi plusieurs utilisateurs publient du contenu dans votre

installation Apache, vous pouvez les autoriser à protéger leur propre répertoire par mot de passe, à l'aide de fichiers

.htaccess (voir Chapitre 1). Ce mécanisme porte préju-

dice aux performances, mais il vous évite de donner 

l'accès aux fichiers de configuration Apache ou aux bases

de données utilisateur, ou encore de les mettre à jour cha-

que fois qu'un changement est nécessaire.

Dans les sections de répertoire appropriées de votre fichier 

de configuration Apache, vous devrez ajouter :

 AllowOverride AuthConfig Limit

L'instruction permet aux utilisateurs de créer leurs propres

fichiers de configuration .htaccess et de placer leurs pro-

pres contrôles d'accès et directives liées aux autorisations.

Page 126: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 126/242

113Refus d'accès aux fichiers système et sensibles

A l'inverse, vous pouvez interdire les changements de

configuration par répertoire, grâce au paramètre global

suivant :

<Directory />

 AllowOverride none

</Directory>

Cela présente comme autre avantage d'améliorer les per-

formances. En effet, Apache n'a pas besoin de rechercher l'existence de fichiers de configuration par répertoire

pour chaque fichier demandé. Vous pouvez également

restreindre le type d'options de configuration autorisées.

Pour en savoir plus, consultez la documentation sur 

 AllowOverride.

Refus d'accès aux fichierssystème et sensibles

Il existe certains types de fichiers auxquels les visiteurs ne

doivent pas avoir accès, quelles que soient les circonstan-

ces, car ils peuvent contenir des mots de passe ou d'autres

informations sensibles. Ce sont les fichiers de sauvegarde

d'exemple créés par les éditeurs de texte UNIX, les

fichiers de configuration par répertoire, etc. Vous pouvez

en refuser l'accès à l'aide de paramètres de configuration

explicites (tels que ceux présentés ici), inclus par défaut

dans la configuration Apache, et refuser l'accès aux

fichiers .htaccess et .htpasswd.

<Files ~ "^\.ht">Order allow,denyDeny from all</Files>

Page 127: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 127/242

114 CHAPITRE 6 Sécurité et contrôle d'accès

Il est également possible d'empêcher le serveur de desservir 

un certain contenu en le configurant de manière qu'il ne

suive pas des liens symboliques. Dans ce but, utilisez les

arguments FollowSymLinks et SymLinksIfOwnerMatch avec

la directive Options, tel qu'indiqué dans la documentation.

Vous pouvez également désactiver  mod_spelling (voir 

Chapitre 4). En effet, ce module peut quelquefois exposer 

"par inadvertance" des noms de fichiers non destinés à être

publiés, comme cela peut être le cas si une URL malorthographiée correspond à plusieurs documents.

Consultez également la section relative à la restriction

d'accès aux listings de répertoires, plus loin dans ce chapitre.

Restriction d'exécutionde programmesLes programmes CGI peuvent présenter un risque pour la

sécurité. Il est conseillé de désactiver leur exécution, ou

du moins de la restreindre à des répertoires spécifiques.

Pour cela, n'utilisez pas les directives AddHandler pour acti-

ver globalement l'exécution CGI de certaines extensions

de fichiers.

De même, mod_include autorise l'exécution de CGI et

de commandes externes à l'aide de SSI. Ils sont désac-

tivés par défaut par la directive Options -IncludesNoExec.

Si possible, vérifiez que les répertoires contenant des

scripts CGI inscriptibles par le superutilisateur unique-ment, et notamment pas par l'utilisateur sous lequel Apa-

che s'exécute.

Sur le même thème, assurez-vous chaque fois que possible

que l'arborescence de documents soit en lecture seule.

Page 128: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 128/242

115Eviter les abus

Cela empêchera une personne malveillante de créer un

fichier pouvant ensuite être exécuté (par exemple, un fichier 

contenant du code PHP qui serait introduit dans un serveur 

activé pour PHP). De même, n'oubliez pas de protéger les

répertoires activés par DAV avec un mot de passe et ne

mettez surtout pas le contenu du site à disposition par le

biais d'autres services, comme le FTP.

Eviter les abusIl existe plusieurs manières de restreindre ou de limiter 

l'accès à tout ou partie de votre site Web. Cela peut être

nécessaire, par exemple, pour protéger un contenu des

moteurs de recherche ou lorsqu'un robot au comporte-

ment indélicat consomme trop de ressources. Ces métho-des sont expliquées en détail au Chapitre 9, qui traite aussi

de la manière d'éviter ou de réduire les attaques de refus de

service. Ces attaques ont pour but d'empêcher le serveur 

de répondre aux requêtes des utilisateurs, ou de le limiter.

Plusieurs modules et paramètres Apache aident à résoudre

ces problèmes en partie.

Désactivation des listingsde répertoire

Apache permet de définir des fichiers d'index spéciaux,

avec la directive DirectoryIndex. Lorsqu'une requête réa-

lisée par un client correspond à un chemin de répertoire,

<Directory /usr/local/apache2/htdocs/private>Options -Indexes</Directory>

Page 129: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 129/242

116 CHAPITRE 6 Sécurité et contrôle d'accès

Apache recherche l'un de ces fichiers d'index (générale-

ment nommés index.html ou accueil.html) et le renvoie

au navigateur. Si aucun fichier n'est trouvé, Apache ren-

voie une page HTML contenant un listing de répertoire.

Même si cela peut être utile au cours du développement

ou lors de la mise à disposition d'un référentiel de fichiers,

il est possible que des noms de fichiers que vous ne sou-

haitez pas voir publier ni indexer par des moteurs de

recherche (comme les fichiers de sauvegarde) le soient.Vous pouvez désactiver les listings de répertoire en désacti-

vant le module mod_autoindex ou en utilisant la directive

Options, comme indiqué ici.

Si les fichiers de configuration par répertoire sont activés,

vous pouvez également placer l'exemple dans un fichier 

.htaccess.

Modification de l'en-tête Server: 

Apache renvoie un en-tête Server: avec chaque requête.Par défaut, cet en-tête contient des informations sur le nom

du serveur, sa version et sa plate-forme. D'autres modules

présents dans le serveur, comme SSL, PHP ou mod_perl,

peuvent ajouter des entrées supplémentaires à la chaîne de

serveurs contenant le nom et la version du module.

Sachez que vous pouvez aussi modifier ou restreindre les

informations d'en-tête du serveur, à l'aide de la directiveServerTokens. Nous recommandons sans cesse de réduire

la quantité d'informations concernant la configuration du

serveur, qui sont vues par le monde extérieur. Toutefois,

modifier la chaîne du serveur n'apportera que peu de

ServerTokens Prod

Page 130: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 130/242

117Empêcher le vol de vos images (hotlinking)

sécurité supplémentaire. En effet, la plupart des outils

d'analyse et d'attaque automatisés ignorent ces informa-

tions ; ils recherchent les scripts et les modules vulnérables

les uns après les autres, quels que soient la version et le

module signalés.

Empêcher le vol de vos images(hotlinking)

Il arrive que des personnes se connectent directement

depuis leur site Web à des ressources présentes sur votre

serveur, comme des images, des logos ou des fichiers de pro-

grammes binaires. Par exemple, un commerçant en ligne

a remarqué que la moitié de son trafic (et de sa facture de

bande passante) provenait d'autres sites qui se connectaientà ses images (sociétés de cartes de crédit, pays...). Ce phéno-

mène, appelé hotlinking (vol de bande passante ), peut être

contré.

Vous pouvez empêcher que des utilisateurs ne se connec-

tent à vos images en exigeant que ce type de requête pro-

vienne de votre serveur. Vous y parviendrez à l'aide de

mod_rewrite. L'exemple de ce listing renverra une réponse

Forbidden à toute requête réalisée sur les fichiers image

(identifiés par leurs extensions à la quatrième ligne Rewrite-

Rule) dont l'en-tête HTTP_REFERER ne correspond pas à votre

nom de domaine (première ligne RewriteCond). En outre,

RewriteEngine OnRewriteCond %{HTTP_REFERER}!^http://(www\.)?exemple\.com/ [NC]RewriteCond %{HTTP_REFERER} ^http:// [NC]RewriteCond %{HTTP_REFERER} !^$

RewriteRule \.(jpg|jpeg|gif|png|bmp)$ - [F]

Page 131: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 131/242

118 CHAPITRE 6 Sécurité et contrôle d'accès

certains navigateurs ne pouvant pas envoyer de champ de

référence valide (voire aucun), d'autres vérifications sont

réalisées pour voir si le champ de référence commence par 

http:// et s'il n'est pas vide (deuxième et troisième lignes

RewriteCond).

Restriction de méthodes HTTPspécifiques

Vous pouvez contrôler l'accès à votre serveur en fonctionde la méthode HTTP de la requête, à l'aide des directives

<Limit> et <LimitExcept>. Cet exemple (extrait du fichier 

de configuration Apache par défaut) montre comment

autoriser des méthodes en lecture seule et refuser des

requêtes pour toute autre méthode susceptible de modi-

fier le contenu du système de fichiers, comme PUT. La sec-

tion <Directory> identifie les répertoires par utilisateur qui peuvent contenir des pages Web (voir Chapitre 8).

Les deux lignes suivantes restreignent les paramètres de

configuration pouvant être modifiés par les utilisateurs,

ainsi que d'autres paramètres de sécurité. La section

<Limit> permet l'accès par défaut aux méthodes HTTP

<Directory /home/*/public_html> AllowOverride FileInfo AuthConfig LimitOptions MultiViews Indexes SymLinksIfOwnerMatchIncludesNoExec<Limit GET POST OPTIONS PROPFIND>

Order allow,deny Allow from all</Limit><LimitExcept GET POST OPTIONS PROPFIND>Order deny,allowDeny from all</LimitExcept></Directory>

Page 132: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 132/242

119Restriction d'accès basée sur le type du navigateur

qui sont en lecture seule, comme GET et POST. La section

<LimitExcept> fait le contraire : elle refuse l'accès à toute

autre méthode, sans avoir explicitement à les énumérer.

Cela est particulièrement utile pour autoriser vos utilisa-

teurs à administrer leur propre contenu (voir Chapitre 8).

Restriction d'accès baséesur le type du navigateur

Vous pouvez restreindre l'accès en fonction du type du

navigateur ou de toute autre information d'en-tête ou

propriété de connexion, grâce aux variables d'environne-

ment, avec Allow et Deny.

Dans ce cas, l'accès sera refusé pour les navigateurs dispo-

sant d'un en-tête User-Agent commençant par EvilSear-

chingEngine, et tous les autres seront autorisés. Cela

s'accomplit à l'aide de la directive SetEnvIf pour définir de

manière conditionnelle une variable d'environnement,

nommée broken_crawler, si l'en-tête User-Agent de la

requête (premier argument) correspond à une expression

régulière donnée (second argument). Plus tard, vous

pourrez appliquer de manière conditionnelle les directivesDeny et Allow en fonction de l'existence de cette variable

d'environnement, identifiée par un préfixe env=. N'oubliez

pas que, même si cette technique fonctionne le plus sou-

vent, les en-têtes étant envoyés par le client, ils ne peu-

vent donc pas être totalement fiables.

SetEnvIf User-Agent ^EvilSearchEngine broken_crawler<Directory /usr/local/apache2/htdocs>Order Deny,AllowDeny from env=broken_crawler</Directory>

Page 133: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 133/242

120 CHAPITRE 6 Sécurité et contrôle d'accès

Utilisation des sections

d'emplacement et de répertoireLa directive Order contrôle l'ordre de traitement des

directives d'accès, uniquement au sein de chaque phase du

traitement de la configuration du serveur. Cela implique,

par exemple, qu'une directive Allow (ou Deny) apparaissant

dans une section <Location> sera toujours évaluée après

une directive Allow (ou Deny) apparaissant dans une sec-tion <Directory> ou un fichier .htaccess, quel que soit le

paramètre de la directive Order.

Prenez en compte que les liens symboliques et les directi-

ves Alias peuvent affecter le paramétrage de l'authentifi-

cation. Les restrictions peuvent ainsi être contournées si

les directives de contrôle d'accès sont placées dans unesection <Location>, mais le contenu est aussi accessible par 

le biais de mappages d'URL supplémentaires.

Autres modules d'authentification

Outre les principaux modules proposant un contrôled'accès basé sur IP, ainsi que l'authentification digest et de

base standard, Apache est livré avec plusieurs autres

modules d'authentification, par exemple :

b mod_auth_anon. Fournit un accès utilisateur "anonyme"

de style FTP aux zones de téléchargement de fichiers.

b mod_auth_ldap. Ce module, disponible dans Apache 2et versions ultérieures, permet d'authentifier les utili-

sateurs par rapport à un répertoire LDAP.

b mod_ssl. Ce module permet d'utiliser une authentifica-

tion du client basée sur un certificat (voir Chapitre 7).

Page 134: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 134/242

121Autres modules d'authentification

L'un des avantages d'Apache réside dans le fait que c'est un

système modulaire et extensible. Plusieurs modules tiers

ont été développés pour lui permettre de s'interfacer avec

des structures d'authentification existantes (comme les

domaines Windows, LDAP, PAM et NIS) et des infor-

mations utilisateur stockées dans une série de bases de

données (MySQL, PostgreSQL, Oracle et autres). Vous

en saurez plus sur ces modules en visitant les adresses

http://modules.apache.orget http://freshmeat.net.L'authentification peut aussi être gérée au niveau de

l'application. On demande généralement le nom d'utilisa-

teur et le mot de passe dans un formulaire Web. Après

validation, un cookie est affecté ; il authentifie l'utilisateur 

pour le reste de la session. C'est ainsi que les sites de por-

tail et de commerce électronique gèrent généralement les

fonctions de personnalisation.

mod_security

Ce module mérite une mention spéciale. C'est, par essence,

un pare-feu de niveau HTTP. Il vous permet d'inspecter 

les requêtes HTTP et de réaliser toutes sortes d'opéra-tions de surveillance, de reporting et de contrôle d'accès.

Il peut détecter et bloquer des attaques communes au

niveau de l'application, notamment celles impliquant une

injection SQL et une vulnérabilité de type chemin trans-

versal. Vous en saurez plus sur ce module en vous rendant

à l'adresse http://www.modsecurity.org.

Page 135: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 135/242

122 CHAPITRE 6 Sécurité et contrôle d'accès

Apache 2.2

Apache 2.2 intègre des modifications significatives dans la

mise en place de l'authentification et de l'autorisation. Ces

changements font principalement référence au travail qui

a été réalisé dans les modules existants pour séparer claire-

ment les méthodes (authentifications de base et digest ) et

les fournisseurs (fichiers, arrière-guichets LDAP ou SQL,

par exemple). Avant cela, les deux fonctions étaient

mélangées dans chaque implémentation de module.

Par exemple, mod_authn_file implémente l'authentification

par rapport aux fichiers texte et mod_authn_dbm réalise

l'authentification par rapport aux fichiers de base de don-

nées. Ils peuvent être associés à mod_auth_basic et mod_auth

_digest qui implémentent à leur tour des authentificationsHTTP de base et digest . D'autres modules propose des

fonctionnalités d'autorisation pour les utilisateurs en fonc-

tion de données stockées dans des bases de données ou en

fonction de fichiers LDAP ou SQL, et d'autres basés sur la

propriété des fichiers ou les adresses IP d'origine.

Les fournisseurs peuvent être mélangés, comme indiquédans l'exemple au début de cette section. Un nouveau

module, mod_authn_alias, permet de définir des configu-

rations d'authentification complexes pouvant être référen-

cées par leur nom partout ailleurs dans le fichier de

configuration. Cela permet, par exemple, d'authentifier la

même ressource sur deux serveurs LDAP différents.

<Location /combined>AuthType BasicAuthName "Restricted Access"AuthBasicProvider file ldapAuthUserFile /usr/local/apache2/conf/htusersAuthLDAPURL ldap://exemple.com/o=SampleRequire valid-user

</Location>

Page 136: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 136/242

123Mise à jour de la sécurité Apache

Mise à jour de la sécurité ApacheComme avec tous les autres logiciels de serveur, vous

devez vous informer sur les nouvelles versions d'Apache,

en vous tenant au fait des problèmes de sécurité, mais éga-

lement des correctifs ou des "contournements" qui existent

pour y remédier. Ces URL vous aideront dans cette tâche :

b Liste de diffusion des annonces Apache :

http://httpd.apache.org/lists.hml

b Problèmes de sécurité Apache :

http://httpd.apache.org/security_report.html

b La semaine Apache :

http://www.apacheweek.com

b Conseils sur la sécurité Apache :

http://httpd.apache.org/docs-2.0/misc/

security_tips.html

Liste de contrôle de sécurité

On dit souvent que la sécurité est un processus, et nonune fonction. Pour que votre installation reste sécurisée,

vous devez suivre les "conseils de sécurité sur Apache" et

surveiller les journaux d'accès et d'erreurs. Etant donné

qu'Apache s'exécute en symbiose avec son environnement,

procédez de même pour le système d'exploitation et les

applications. En fait, la plupart des problèmes exploitables à

distance avec Apache naissent au niveau de l'application :wiki vulnérable, bibliothèques PHP, composants, etc.

Cela dit, vous trouverez ici une liste détaillée de mesures

à entreprendre pour sécuriser une installation Apache par 

défaut.

Page 137: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 137/242

124 CHAPITRE 6 Sécurité et contrôle d'accès

Désactiver les modules inutiles

La première étape consiste à désactiver tous les modules quevous n'utilisez pas. Si vous avez compilé Apache avec une

prise en charge de modules chargeables, vous pouvez trans-

former en commentaires les directives qui chargent des

modules spécifiques. Vous devrez peut-être procéder de

même pour d'autres directives présentes dans le fichier 

de configuration et faisant référence au module désactivé.Voici une courte liste des premiers modules à retirer si vous

ne les utilisez pas, à peu près dans leur ordre d'importance :

b PHP, mod_python, mod_mono, mod_perl et tous les autres

modules de langage côté serveur. Bien sûr, ne désac-

tivez PHP que si vous n'utilisez pas Apache pour exé-

cuter des applications à base de PHP.

b mod_include, qui fournit la prise en charge SSI.

b mod_cgi, qui fournit la prise en charge de l'appel des

programmes externes.

b mod_ssl, utilisé pour apporter une assistance SSL et

TLS, et sécuriser les communications entre le naviga-

teur et Apache.

b mod_proxy, qui, s'il est mal configuré, peut permettre

aux personnes extérieures d'utiliser votre serveur pour 

relayer des requêtes.

b mod_deflate, un filtre Apache 2 pour compresser la

sortie à la volée.

b mod_suexec, employé pour exécuter des programmes

externes sous des identifiants utilisateur différents decelui sous lequel s'exécute Apache.

b mod_userdir, qui permet aux utilisateurs des systèmes

UNIX d'héberger leurs propres pages.

b mod_rewrite, qui autorise un mappage arbitraire et la

réécriture des URL entrantes.

Page 138: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 138/242

125Suppression des échantillons de script

De plus, dans Apache 1.3, vous pouvez désactiver expli-

citement des modules compilés spécifiques, en utilisant la

directive ClearModuleList, puis en activant explicitement

des modules, à l'aide de la directive AddModule.

Suppression des échantillons

de scriptLa plupart des logiciels et des environnements de déve-

loppement côté serveur Web proposent des exemples

d'applications et de scripts à des fins de démonstration ou

de test. Même s'ils sont utiles, ces exemples ne sont géné-

ralement pas codés en tenant compte de la sécurité. Ils

peuvent donc être vulnérables à plusieurs attaques, la

plupart liées au fait que le programme n'efface pas correc-

tement la saisie de l'utilisateur. Ces inconvénients permet-

tent souvent à un délinquant d'exécuter des commandes

système arbitraires, affichant le contenu des autres fichiers,

ou de modifier la base de données.

N'oubliez pas de supprimer tous les exemples de scripts et

les comptes de démonstration livrés avec vos serveursd'application, ainsi que votre environnement de dévelop-

pement et autres logiciels basés sur le Web que vous

pourriez avoir installés.

Restreindre ou désactiverl'exécution de CGI et de SSISi la prise en charge des scripts CGI ne vous concerne pas,

désactivez mod_cgi. Dans le cas contraire, limitez la capa-

cité à exécuter des scripts à des répertoires spécifiques.

Page 139: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 139/242

126 CHAPITRE 6 Sécurité et contrôle d'accès

Par exemple, vous pouvez analyser votre configuration à

la recherche des directives ScriptAlias et Options avec les

arguments ExecCGI et vous assurer qu'elles sont correcte-

ment configurées. Vérifiez que des tiers ne peuvent pas

écrire dans les répertoires marqués comme contenant des

scripts exécutables. Vous pouvez également envisager 

d'utiliser l'enveloppe CGI suExec comprise avec Apache.

Le même raisonnement peut s'appliquer à la fonctionna-

lité SSI, prévue par mod_include, qui permet l'exécutionde commandes externes, à moins qu'elle ne soit désactivée

par Options -IncludesNoExec.

 Vérifier les autorisations

de fichiersSous UNIX, Apache est généralement démarré à partir de

la racine. Il effectue un certain nombre d'opérations, par 

exemple la liaison au port approprié, puis change d'iden-

tifiant utilisateur pour celui spécifié dans la directive User.

Puisque certaines opérations sont réalisées à partir de la

racine, il faut s'assurer que les fichiers journal et de confi-guration, ainsi que les répertoires qui les contiennent, ne

sont pas inscriptibles par d'autres. Assurez-vous que les

répertoires marqués comme contenant des scripts exécu-

tables ou qui peuvent contenir des scripts PHP ne sont ni

inscriptibles par tous, ni accessibles par FTP ou WebDAV,

par exemple.

Page 140: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 140/242

127Limiter ou désactiver la fonctionnalité de proxy

Limiter ou désactiver la

fonctionnalité de proxyComme avec les CGI, vous devez désactiver ou restrein-

dre la prise en charge des proxy dans votre installation

Apache, faute de quoi un proxy ouvert pourrait servir à

lancer des attaques ciblées sur d'autres sites, voire à relayer 

du spam. Si vous exécutez Apache sous forme de proxy

inverse, vous pouvez désactiver le proxy "ordinaire", ouclassique, avec ProxyRequests off.

Restreindre l'accèsà votre serveur par défautLe serveur doit être configuré de manière à refuser l'accès

par défaut aux documents qu'il contient, à moins que

l'accès ne soit explicitement activé. L'extrait de configura-

tion suivant, tiré de la documentation Apache, montre

comment procéder :

<Directory />

Order Deny,Allow

Deny from all

</Directory>

<Directory /usr/local/apache2/htdocs>

Order Deny,Allow

Allow from all

</Directory>

Consultez les sections précédentes pour savoir comment

désactiver les listings de répertoires.

Page 141: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 141/242

Page 142: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 142/242

7

SSL et TLS

Ce chapitre propose une brève introduction aux concepts

qui sous-tendent SSL. Il se présente comme un guide

détaillé pour l'installation et la configuration du module

Apache mod_ssl. Vous verrez comment résoudre les pro-blèmes communs liés à SSL. D'autre part, vous apprendrez

à créer, à signer et à installer vos clés et certificats de serveur.

Définition de SSLLa famille de protocoles SSL/TLS (Secure Sockets Layer/ 

Transport Layer Security) sert à sécuriser les communica-

tions entre deux points d'extrémité, généralement un ser-

veur et un client. Lorsqu'un navigateur accède à un

serveur Web à l'aide du protocole HTTP, les données

sont transmises de manière ouverte. Un tiers capable

d'intercepter cette conversation à un point du réseaupourra accéder aux données transmises, voire les modifier.

Plusieurs applications, notamment celles destinées aux

paiements électroniques sur le Web, ainsi que l'accès à des

informations d'entreprise sensibles nécessitent un niveau de

sécurité qui n'est pas disponible avec le protocole HTTP.

Page 143: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 143/242

130 CHAPITRE 7 SSL et TLS

Le protocole HTTPS, ou HTTP sécurisé, a été développé

pour répondre à ces préoccupations. Il améliore la sécurité

du protocole HTTP en apportant :

b La confidentialité. Il crypte les données de sorte

qu'elles ne soient pas lisibles par des tiers.

b L'intégrité. Il s'assure que les données n'ont pas été

modifiées pendant leur transit.

b

L'authentification. Il vérifie l'identité du serveur (ou du client).

HTTPS encapsule HTTP sur les protocoles SSL/TLS

(Secure Sockets Layer/Transport Layer Security), que nous

appellerons "SSL" dans la suite de ce chapitre. Le port par 

défaut du protocole HTTPS est 443 ; les URL HTTPS

sont préfixées par https://.Vous le savez probablement déjà, la plupart des navigateurs

proposent des indices visuels, généralement sous la forme

d'un cadenas placé près de la barre d'adresses, lorsque vous

êtes connecté à un site utilisant le protocole HTTPS.

Fonctionnement de SSLLorsqu'un utilisateur tape https://www.exemple.com, le

navigateur reconnaît le préfixe https:// et emploie donc

le protocole HTTPS pour se connecter au serveur. Si

aucun port n'est spécifié, c'est le port HTTPS par défaut

(443) qui est utilisé.Lorsqu'une connexion est établie, le client demande le cer-

tificat du serveur. Un certificat est une donnée électroni-

que qui décrit l'identité d'un point d'extrémité dans la

communication SSL (voir plus loin). La validité du certifi-

cat est alors testée.

Page 144: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 144/242

131Compilation d'OpenSSL

Si le processus de validation réussit, la connexion se

poursuit. S'il échoue, l'utilisateur en est informé et il doit

fournir une confirmation. En option, le client peut aussi

apporter un certificat ; le serveur suivra alors un processus

de validation semblable.

Une fois l'identité du serveur (et, si nécessaire, du client)

établie, l'étape suivante consiste à convenir d'une clé de

cryptage commune. Dans ce but, les clés publiques de

chaque partie sont utilisées dans un algorithme pour s'accorder en toute sécurité sur une clé symétrique. Plus

loin dans ce chapitre, vous en apprendrez davantage sur 

les clés de cryptage et la manière de les générer. Le pro-

cessus d'accord est sécurisé contre les espions. En effet,

lorsque vous cryptez des informations avec la clé publique

du serveur, seul le serveur peut les décrypter.

Enfin, le client et le serveur peuvent procéder à l'échange

ordinaire d'informations. Ici, la plupart des navigateurs pro-

posent à l'utilisateur des indices visuels (généralement un

cadenas fermé) montrant que la connexion est sécurisée.

Compilation d'OpenSSL

mod_ssl est le module Apache qui implémente HTTPS.

Le projet OpenSSL propose les bibliothèques cryptogra-

phiques de base employées par mod_ssl, ainsi que des uti-

litaires de ligne de commande pour créer et manipuler des

certificats de serveur.

# gunzip < openssl*.tar.gz | tar xvf -# cd openssl*# ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl/openssl# make

# make install

Page 145: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 145/242

132 CHAPITRE 7 SSL et TLS

Vous pouvez télécharger une version du binaire Win-

dows, dans la section des binaires du site Web OpenSSL,

à l'adresse http://www.openssl.org. La plupart des sys-

tèmes modernes de type UNIX incluent OpenSSL par 

défaut, mais vous pouvez également utiliser les outils de

gestion de packages système. Si ce n'est pas le cas ou que

vous ayez besoin d'une version plus récente que celle dis-

ponible sur votre système, téléchargez le source OpenSSL

et installez-le comme indiqué au début de cette section.Dans la suite de ce chapitre, nous supposerons que vous

avez installé OpenSSL dans le répertoire /usr/local/ssl.

L'outil de ligne de commande openssl figure dans la distri-

bution OpenSSL. Il sera placé dans /usr/local/ssl/bin/.

Clés de cryptageLe cryptage est un processus qui consiste à convertir un

message existant, en texte brut, en un nouveau message

totalement inintelligible pour un espion. Le décryptage

correspond au processus inverse : il transforme le message

crypté en texte brut original.Généralement, le processus de cryptage et de décryptage

nécessite d'autres informations, à savoir une clé. Si l'expé-

diteur et le destinataire partagent la même clé, le processus

est appelé cryptographie symétrique . Si l'expéditeur et le des-

tinataire possèdent des clés différentes et complémentaires,

on parle alors de cryptographie asymétrique ou cryptographie de 

clé publique . La cryptographie de clé publique implique

une paire de clés, dont l'une est publique et l'autre privée.

La clé publique peut être mise librement à disposition,

tandis que le propriétaire conserve la clé secrète privée.

Ces deux clés sont complémentaires ; un message crypté

avec l'une des clés ne peut être décrypté qu'avec l'autre.

Page 146: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 146/242

133Création d'une paire de clés

Création d'une paire de clés

L'exemple montre comment créer une paire de clés en

utilisant l'outil de ligne de commande openssl.

genrsa indique à OpenSSL que vous souhaitez générer 

une paire de clés à l'aide de l'algorithme RSA.

Le commutateur rand sert à fournir à OpenSSL des don-

nées aléatoires pour s'assurer que les clés générées sontuniques et impossibles à deviner. Remplacez ensuite

fichier1, fichier2, etc. par le chemin menant à plusieurs

grands fichiers, relativement aléatoires (image de kernel,

fichiers journaux compressés, etc.). Ce commutateur n'est

pas nécessaire sous Windows, car les données aléatoires

sont automatiquement générées par d'autres moyens.

Le commutateur out indique où conserver les résultats.

1024 signale le nombre de bits de la clé générée.

Création d'une paire de clés

protégées par mot de passe

# ./usr/local/ssl/bin/openssl genrsa -randfichier1:fichier2:fichier3 \

-out www.exemple.com.key 1024625152 semi-random bytes loadedGenerating RSA private key, 1024 bit long modulus.....++++++.........................++++++e is 65537 (0x10001)

# ./usr/local/ssl/bin/openssl genrsa –des3 -randfichier1:fichier2:fichier3 \

-out www.exemple.com.key 1024

Page 147: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 147/242

134 CHAPITRE 7 SSL et TLS

Ici, l'option des3 indique que la clé privée doit être cryptée

et protégée par un mot de passe qui vous sera demandé dès

que vous souhaiterez lancer le serveur, comme indiqué à la

section "SSLPassPhraseDialog".

Suppression du mot de passe

d'une clé

Vous pouvez choisir d'ôter la protection de la clé en émet-

tant cette commande. Cela présentant certains risques pour 

la sécurité, veuillez consulter la section "SSLPassPhraseDia-log".

CertificatsLa cryptographie par clé publique peut servir à signer des

messages numériquement. Si, par exemple, vous cryptezun message avec une clé secrète, le destinataire peut être

assuré qu'il provient de vous en le décryptant simplement

avec la clé publique. Il manque toutefois une étape. Com-

ment, en effet, pouvez-vous authentifier des correspon-

dants que vous n'avez jamais rencontrés en personne ?

Autrement dit, comment pouvez-vous vérifier à quiappartient réellement une clé publique ?

La solution consiste à impliquer un tiers de confiance,

c'est-à-dire une autorité de certification (Certification

 Authority, CA). La CA peut être interne à une société ou

à une université, ou encore être un organisme commercial

# ./usr/local/ssl/bin/openssl rsa -inwww.exemple.com.key \

-out www.exemple.com.key.unsecure

Page 148: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 148/242

135Création d'une requête de signature de certificat

proposant des services de certification aux entreprises qui

réalisent des transactions sur Internet. Une CA délivre des

certificats, à savoir des documents électroniques qui lient

une clé publique particulière à des informations concer-

nant son propriétaire, par exemple un nom et une adresse.

Les certificats sont signés numériquement avec la clé pri-

vée de la CA, ce qui garantit que les informations sont

correctes.

Pour que l'ensemble de ce processus fonctionne, vousdevez faire confiance à l'autorité qui a délivré le certificat.

Vous devez aussi pouvoir obtenir la clé publique pour 

cette autorité particulière, fournie par son certificat racine.

La plupart des grands navigateurs, comme Internet Explo-

rer, Firefox et Safari, contiennent plusieurs certificats

racine, provenant des autorités de certification les plus

courantes. Cela permet aux navigateurs de reconnaître et

de valider un grand nombre de sites Web sans que l'utili-

sateur n'ait à intervenir.

Création d'une requête

de signature de certificat

Pour obtenir un certificat délivré par une autorité, vous

devez d'abord soumettre ce que l'on appelle une requête de

signature de certificat. Comme expliqué précédemment, larequête contient des données sur l'organisme qui demande

le certificat et la clé publique. Cette commande crée une

requête de ce type. Sachez qu'il faudra fournir plusieurs

informations, comme indiqué au Listing 7.1.

# ./usr/local/ssl/bin/openssl req -new -keywww.exemple.com.key -out www.exemple.com.csr

Page 149: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 149/242

136 CHAPITRE 7 SSL et TLS

Listing 7.1 Utilisation d'openssl pour générer une requêtede certificat

Using configuration from

/usr/local/ssl/openssl/openssl.cnf

Enter PEM pass phrase:

You are about to be asked to enter information that

will be incorporated

into your certificate request.

 What you are about to enter is what is called aDistinguished Name or a DN.

There are quite a few fields but you can leave some

blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:US

State or Province Name (full name) [Some-State]:CA

Locality Name (eg, city) []: San Francisco

Organization Name (eg, company) [Internet Widgits

Pty Ltd]:.

Organizational Unit Name (eg, section) []:.

Common Name (eg, YOUR name) []:www.exemple.com

Email Address []:[email protected]

Please enter the following 'extra' attributes

to be sent with your certificate request

 A challenge password []:

 An optional company name []:

Il faut savoir que l'entrée de champ "Common Name" corres-

pond à l'adresse que taperont les visiteurs de votre siteWeb dans leur navigateur. C'est l'une des vérifications

réalisées par le navigateur pour le certificat de serveur dis-

tant. Si le nom diffère, un avertissement est affiché pour 

l'utilisateur, précisant l'absence de concordance.

Page 150: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 150/242

137Affichage du contenu d'une requête de signature de certificat

Vous pouvez maintenant soumettre les fichiers de requête

de signature du certificat à une autorité de certification, à

des fins de traitement. Le processus varie selon les organis-

mes. Vous trouverez une liste complète des autorités de

certification à l'adresse http://www.pki-page.org/.

VeriSign, Thawte, GeoTrust et Equifax sont les plus con-

nues, mais il existe aussi d'autres autorités communautai-

res, comme Cacert (http://www.cacert.org/).

Affichage du contenu d'unerequête de signature de certificat

Les requêtes de signature de certificat sont conservées dans

un formulaire spécial et compact. Cette commande affiche

le contenu du certificat conservé à l'adresse www.exem-

ple.com.csr dans un format lisible. Comme indiqué pré-

cédemment dans ce chapitre, le certificat contient des

informations sur l'entité qui le demande, le contenu de laclé publique et une signature créée avec la clé privée.

Création d'un certificatautosignéOutre soumettre votre demande de signature de certificat

à une CA commerciale, vous pouvez toujours créer un

certificat autosigné, c'est-à-dire être à la fois l'émetteur et

l'objet du certificat. Même si cela n'est pas très utile pour 

un site Web commercial, l'opération permet de tester 

# ./usr/local/ssl/bin/openssl req -noout \

-text -in www.exemple.com.csr

Page 151: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 151/242

138 CHAPITRE 7 SSL et TLS

votre installation de mod_ssl ou de disposer d'un serveur 

Web sécurisé, tout en attendant le certificat officiel de

l'autorité de certification.

# ./usr/local/ssl/bin/openssl x509 -req \

-days 30 -in www.exemple.com.csr -signkey \

www.exemple.com.key -out www.exemple.com.cert

Vous devez ensuite copier votre certificat www.exemple.com

.cert(celui renvoyé par l'autorité ou celui autosigné) à

/usr/local/ssl/openssl/certs et votre clé à /usr/local/

ssl/openssl/private/.

Protégez votre fichier de clés en émettant la commande

suivante :

# chmod 400 www.exemple.com.key

Compilation de la prise en chargeSSL dans Apache 1.3

mod_ssl est un module très populaire qui assure la prise encharge SSL à la fois pour Apache 1.3 et 2.x. Pour des rai-

sons historiques liées aux restrictions d'exportation sur la

cryptographie, la version Apache 1.3 est distribuée sépa-

rément du serveur. De plus, le code source d'Apache 1.3

doit être corrigé pour prendre en charge mod_ssl.

$ gunzip < mod_ssl-2.8.23-1.3.33.tar.gz | tar xvf -$ gunzip < apache_1.3.33.tar.gz | tar xvf -

$ cd mod_ssl-2.8.23-1.3.33$ ./configure --with-apache=../apache_1.3.33$ cd ../apache_1.3.x$ SSL_BASE=/usr/local/ssl/ ./configure --enable-module=ssl --prefix=/usr/local/apache$ make# make install

Page 152: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 152/242

139Compilation de la prise en charge SSL dans Apache 1.3

Cela est réalisé dans le cadre du processus de construction

mod_ssl, présenté au Listing 7.1. L'exemple construit Apa-

che 1.3.33 et mod_ssl 2.8.23 et suppose que les deux

répertoires source sont situés au même niveau. L'option

de ligne de commande --with-apache pointe vers

l'emplacement du répertoire du source Apache 1.3, qui

est ensuite recompilé pour inclure la prise en charge

mod_ssl.

Si vous élaborez votre installation par rapport à unebibliothèque OpenSSL système, vous pouvez supprimer 

SSL_BASE=/usr/local/ssl/ de l'étape de configuration

d'Apache.

Si Apache contient déjà les correctifs EAPI et la prise en

charge de modules chargeables, vous pouvez enfin utiliser 

le mécanisme de construction APXS commun (voir Cha-pitre 1). Il est utile, par exemple, pour mettre à niveau

une installation mod_ssl existante.

Attention

Si vous tentez de lancer Apache maintenant, vous obtiendrezun message d'erreur indiquant qu'il est impossible de lire lecertificat du serveur. Consultez les sections précédentes poursavoir comment créer votre certificat et vos clés de serveur etla section "Configuration minimale d'Apache", plus loin dansce chapitre, pour savoir comment démarrer votre serveur. Enoption, mod_ssl peut créer un certificat de serveur à des fins detest lors du processus de construction. Pour cela, lancez unmake certificate avant make install.

Page 153: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 153/242

140 CHAPITRE 7 SSL et TLS

Compilation de la prise en charge

SSL dans Apache 2.xApache 2 étant sorti après les réglementations d'exporta-

tion américaines sur la cryptographie, il propose mod_ssl

en complément des autres modules.

Si vous montez Apache à partir du source, vous pouvez

activer  mod_ssl au moment de la construction, avec

l'option de configuration --enable-ssl. Si vous montez

également OpenSSL à partir de la source, vous devrez

ajouter  --with-ssl=/usr/local/ssl/openssl.

Configuration minimale d'ApacheUne fois les clés et certificats générés, qu'ils soient autosi-

gnés ou certifiés par un tiers, vous allez configurer Apache.

Dans le cadre du processus d'installation, mod_ssl crée une

configuration SSL d'exemple. Apache 1.3 l'ajoute au fichier 

httpd.conf par défaut ; quant à Apache 2.0, il comprend

un fichier  ssl.conf séparé, référencé par une directive

Include dans httpd.conf. Il existe un grand nombred'options de configuration, ce qui peut être déroutant.

En réalité, seules quelques-unes vous seront nécessaires

pour la configuration, comme indiqué ici :

Listen 80

Listen 443

<VirtualHost _default_:443>

ServerName www.exemple.com

SSLEngine on

SSLCertificateFile \

/usr/local/ssl/openssl/certs/www.exemple.com.cert

SSLCertificateKeyFile \

/usr/local/ssl/openssl/certs/www.exemple.com.key

</VirtualHost>

Page 154: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 154/242

141Démarrage d'Apache avec prise en charge SSL

L'une des directives Listen indique à Apache d'écouter 

sur le port HTTPS par défaut, 443. SSLEngine On active

SSL pour cet hôte particulier. Les directives SSLCertifi-

cateFile et SSLCertificateKeyFile pointent vers le certi-

ficat et la clé privée.

Démarrage d'Apacheavec prise en charge SSLUne fois mod_ssl installé et configuré, vous pouvez lancer 

à Apache avec :

apachectl start

Si vous utilisez des fichiers de configuration SSL par défaut

(ou ceux fournis par votre vendeur), les directives SSL

seront probablement entourées d'un bloc <IfDefine SSL>.

Vous pouvez, soit retirer ces blocs, soit démarrer Apache

avec :

apachectl startssl

Cela transfère la balise -DSSL au binaire du serveur etactive la configuration SSL.

Attention

Cela ne doit être réalisé que dans Apache 1.3 et 2.0. En effet,Apache 2.2 n'intégrant plus l'option startssl, les directives

SSL ne sont plus considérées différemment des autres.

Si vous avez protégé votre clé privée par un mot de

passe, indiquez-le maintenant. Si vous avez installé Apa-

che en tant qu'utilisateur ordinaire, il est possible qu'il ait

été configuré pour écouter par défaut sur le port 8443.

Page 155: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 155/242

142 CHAPITRE 7 SSL et TLS

Comme expliqué au Chapitre 2, le port 443 est un port

à privilèges et il n'est accessible que par le superutilisa-

teur.

Vous pouvez tester l'installation en accédant au serveur, à

l'adresse https://www.exemple.com (ou https://www.exem-

ple.com:8443, nous venons de l'expliquer).

SSLPassPhraseDialog 

Si vous avez protégé votre clé privée du serveur par mot

de passe, vous devrez le saisir au moment du démar-

rage. Vous pouvez contrôler ce comportement avec

SSLPassPhraseDialog. Sa valeur par défaut, builtin, signi-

fie qu'Apache demandera le mot de passe directement, à

chaque démarrage du serveur. Vous pouvez aussi choisir 

de ne pas protéger la clé (notamment pour des raisons de

commodité ; vous n'aurez ainsi pas besoin de saisir manuel-

lement le mot de passe à chaque redémarrage). Attention,

cependant ! Dans ce cas, si le serveur rencontre un pro-blème, il en ira de même pour la clé. Vous pouvez éga-

lement configurer SSLPassPhraseDialog pour appeler un

programme externe, qui fournira le mot de passe sur son

entrée standard lorsqu'il sera appelé par Apache.

Avec un script correctement rédigé, vous obtenez davan-

tage de sécurité que si vous laissiez la clé sans protection

(mais pas beaucoup plus).

SSLPassPhraseDialog builtin

Page 156: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 156/242

143Amélioration des performances SSL

Amélioration

des performances SSLLes algorithmes impliqués dans SSL sont gourmands en

unité centrale et peuvent considérablement ralentir le

serveur, en particulier en cas de connexions client simul-

tanées. La phase d'échange d'informations peut également

retarder la requête. Plusieurs options peuvent cependant

améliorer la capacité de réponse d'un site.

Vérifiez de bien avoir activé la mise en cache de la session.

Cela accélère les situations où il existe plusieurs connexions

à partir du même client. En cas de grappe de serveurs SSL,

utilisez distcache, de sorte que les données de connexion

puissent être mises en cache même si le client se connecte

à plusieurs serveurs dans la grappe. Apache 2.2 assure laprise en charge du distcache dès l'installation. Vous en

saurez plus sur ce projet en vous rendant à l'adresse

http://www.distcache.org.

Vous pouvez aussi envisager de disposer d'une machine

dédiée, réservée au traitement SSL. Selon vos besoins, il

peut s'agir d'un équilibreur de charge commercial (élément

matériel) ou d'une machine dédiée exécutant un proxy

inverse (un serveur Web qui se fie à des requêtes vers

d'autres serveurs Web au nom du client). Cela permet

d'apporter des améliorations dans la configuration d'Apache

et du système d'exploitation qui ne seraient pas possibles si

la machine servait également à d'autres objectifs, comme

l'exécution de PHP, de Tomcat et de MySQL. Un proxyinverse peut offrir des avantages supplémentaires, comme

l'équilibrage des charges et la connexion unique, avec

possibilité d'utiliser des certificats client, sur plusieurs sites

Web d'arrière-guichet. Consultez le Chapitre 10 pour en

savoir plus.

Page 157: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 157/242

144 CHAPITRE 7 SSL et TLS

Enfin, vous pouvez installer une carte de cryptographie,

un matériel conçu pour décharger le serveur de la majeure

partie du traitement SSL. Apache 2.2 prend en charge

cette fonctionnalité ; consultez pour cela la directive

SSLCryptoDevice.

Forcer le contenu à être desservipar SSL

Si vous disposez d'un site Web particulier qui ne doit êtredesservi que par SSL, vous pouvez utiliser un Redirect

dans une section <VirtualHost> qui écoute les requêtes

HTTP et les redirige vers un site Web sécurisé (comme

indiqué dans l'exemple). L'opération est utile, car les utilisa-

teurs oublient parfois de taper https:// au lieu de http://.

SSL et hôtes virtuels SSL baséssur le nomUne question revient souvent chez les utilisateurs de

mod_ssl : "Est-il possible de disposer de plusieurs hôtes vir-

tuels basés sur le nom et activés par SSL ?" La réponse estnon. Le problème est que l'hébergement virtuel basé sur le

nom repose sur des informations fournies par le client dans

l'en-tête Host: de la requête HTTP, puisque tous les hôtes

virtuels basés sur le nom partagent la même adresse IP.

<VirtualHost 192.168.200.4:80>ServerName private.exemple.comRedirect / https://private.exemple.com/

</Virtualhost>

Page 158: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 158/242

145Utilisation des modules Auth d'Apache avec SSL

Toutefois, la connexion SSL a lieu au niveau TCP, avant

que la requête HTTP ne puisse être envoyée. Le serveur 

n'est donc pas capable de déterminer, au moment de la

connexion, l'hôte virtuel auquel le client veut se connec-

ter et donc le certificat et la clé à utiliser. A noter qu'il

existe une spécification (RFC 2817) qui autorise la mise à

niveau d'une connexion HTTP existante vers HTTPS.

Cela permet de contourner le problème mais, à l'heure où

nous écrivons ces lignes, elle n'est implémentée par aucungrand navigateur. Le module mod_ssl d'Apache 2.2

implémente la prise en charge de RFC 2817, tout comme

mod_nw_ssl, le module SSL Apache de Netware.

Utilisation des modules Auth d'Apache avec SSL

Lorsque cette option est activée, le nom distinctif (ou

Subject Distinguished Name ) du certificat client est traduit

en un nom d'utilisateur avec autorisation de base HTTP.Cela signifie que les méthodes d'authentification Apache

standard (voir Chapitre 6) peuvent être utilisées pour le

contrôle d'accès. Ces modules d'authentification "croient"

que l'utilisateur a fourni un nom et un mot de passe vala-

bles. Vous devrez modifier certains paramètres dans vos

bases de données utilisateur.

SSLOptions +FakeBasicAuth

Page 159: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 159/242

146 CHAPITRE 7 SSL et TLS

Messages d'avertissement

lors de l'accès à un site Webactivé par SSLParfois, lors de l'accès à un site Web activé par SSL, les uti-

lisateurs voient s'afficher une fenêtre contextuelle d'aver-

tissement indiquant que quelque chose ne va pas avec le site

Web. Voici quelques-unes des causes les plus fréquentes :

b Le certificat a expiré. Les certificats commerciaux sont

généralement valables pendant une période donnée,

après quoi ils expirent.

b Le domaine du certificat ne correspond pas au

domaine du serveur. Cela survient si le certificat a été

délivré pour un site Web différent.

b Le certificat a été signé par une autorité de certifica-

tion inconnue ou en laquelle le navigateur n'a pas

confiance. Cela peut survenir, par exemple, si vous

utilisez un certificat autosigné à des fins de test.

Création de certificats clientLorsque vous utilisez l'autorisation de certificat client, le

serveur vérifie, lors de la phase d'échange de données, que

le client présente un certificat valide et que ce dernier a été

signé par une autorité de confiance. Même si cela est lourd

à gérer et à distribuer, les certificats client protègent l'accès

aux sites ou aux services Web de la société. Ils sont souventdavantage sécurisés que les noms d'utilisateur et les mots de

passe, car ils ne peuvent être ni devinés ni interceptés.

Pour devenir votre propre autorité de certification, la pre-

mière étape consiste à créer une CA racine. Pour cela, uti-

lisez l'argument ca de l'outil de ligne de commande ou

bien le script d'enveloppe CA.pl, intégré avec openssl.

Page 160: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 160/242

147Authentification à l'aide des certificats client

Pour créer une nouvelle autorité de certification, vous

pouvez émettre la commande suivante :

CA.pl -newca

Le script génère alors une clé privée, un certificat de

serveur, etc., ainsi qu'une structure de répertoires qui

contient les fichiers générés.

Vous pouvez maintenant créer une demande de signature

de certificat (CSR) et signer votre certificat avec :CA.pl -newreq

CA.pl -signreq

Le fichier de CA généré aura le format PEM. Pour le

convertir dans un format autre qui le rende plus commode

à importer dans les navigateurs, exécutez la commande

suivante :CA.pl -pkcs12

La méthode exacte pour importer le certificat vers la

machine de l'utilisateur final varie selon le type du naviga-

teur. Les utilisateurs d'Internet Explorer n'ont qu'à cliquer 

sur le fichier de certificat et à suivre les instructions.

Authentification à l'aidedes certificats client

Une fois que vous avez installé des certificats dans vos

clients, vous devez demander à Apache d'activer la valida-

tion SSL pour les clients. Cette directive SSLVerifyClient

exige des clients qu'ils fournissent un certificat valide pour 

SSLVerifyClient require

SSLCACertificateFile \/usr/local/ssl/openssl/certs/ca.crt

Page 161: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 161/242

148 CHAPITRE 7 SSL et TLS

pouvoir se connecter. SSLCACertificateFile fournit le che-

min vers le fichier contenant le certificat CA de confiance

qui servira à vérifier la validité du certificat client.

Alternatives à mod_ssl Il existe plusieurs alternatives à mod_ssl. Pour Apache 1.3,

vous pouvez utiliser Apache-SSL, le module qui se trouveêtre à l'origine de mod_ssl. Vous le trouverez à l'adresse

http://www.apache-ssl.org. Plusieurs sociétés com-

merciales, comme IBM, disposent de leurs propres modules

SSL, inclus dans leurs packages de serveur Web basés sur 

Apache, et utilisant généralement des boîtes à outils autres

que OpenSSL.

Enfin, vous pouvez choisir un utilitaire indépendant,

comme stunnel (http://www.stunnel.org), pour placer 

en proxy les connexions SSL à un serveur Apache existant.

Même s'il n'est pas aussi flexible que mod_ssl, il peut être

pratique pour certains scénarios lorsqu'il n'est pas possible

ni souhaitable de modifier une configuration de serveur 

en fonctionnement.

Test de sites Web activés par SSLà partir de la ligne de commande

Vous pouvez utiliser  openssl ou d'autres outils basés sur 

SSL, comme stunnel (http://www.stunnel.org), pour 

tester des serveurs Web sécurisés. Il est notamment possible

d'employer cette commande pour vous connecter au site

Web d'IBM à l'aide de HTTPS. Vous obtiendrez des

# openssl s_client -connect www.ibm.com:443

Page 162: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 162/242

149Contourner les implémentations SSL présentant des bogues

détails sur le protocole SSL et le certificat de serveur pour 

la connexion. Vous pouvez également émettre une com-

mande GET / HTTP/1.0 et appuyer sur Entrée pour obtenir 

une réponse, comme si vous aviez utilisé Telnet pour 

vous connecter à un serveur Web ordinaire sur le port 80

pour émettre des requêtes HTTP manuellement (voir 

Chapitre 1).

Contourner les implémentationsSSL présentant des bogues

Certains navigateurs (ou serveurs, s'ils opèrent dans une

configuration de proxy inverse) présentent des problèmes

connus avec des versions spécifiques du protocole SSL ou

de certaines fonctions. Certaines variables d'environne-

ment peuvent être réglées pour forcer des comportements

spécifiques. Cela est particulièrement utile si vous dispo-

sez d'un site commercial et que vous deviez prendre en

charge des navigateurs plus anciens. Ainsi, l'extrait pré-

senté ici, qui figure dans le fichier de configuration par 

défaut, contourne les bogues de l'implémentation SSL des

navigateurs Internet Explorer. Si le navigateur client

contient la chaîne MSIE, la prise en charge de maintien

en activité (keep-alive ) sera mise en service, pour porter sonchoix sur une précédente version du protocole HTTP.

SetEnvIf User-Agent ".*MSIE.*" nokeepalive \ssl-unclean-shutdown downgrade-1.0 \

force-response-1.0

Page 163: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 163/242

150 CHAPITRE 7 SSL et TLS

Contrôle d'accès complexe

avec mod_ssl 

Cet exemple montre comment utiliser la directive SSLRe-

quire pour implémenter les restrictions d'accès arbitraires

fondées sur plusieurs paramètres. Comme cela arrive avec

mod_rewrite, SSLRequire peut être complexe à configurer,

mais il offre des possibilités quasi illimitées. L'extrait de

configuration qui précède vérifie que :

b La connexion SSL n'utilise pas un chiffrage d'exporta-

tion (faible) ou un chiffrage NULL, que le certificat a

été émis par une CA particulière et pour un groupe

particulier et que l'accès a lieu pendant les jours de

travail (du lundi au vendredi), aux heures de travail

(de 8 h 00 à 20 h 00).

b Le client provient d'un réseau interne, de confiance(comme indiqué par REMOTE_ADDR).

Veuillez vous reporter à la documentation de SSLRequire

pour plus d'informations.

Chapitres annexesSi vous utilisez Apache comme proxy inverse, sachez que

les informations relatives au certificat et aux connexions

liées à SSL pour les clients ne sont pas disponibles pour les

serveurs d'arrière-guichet. Vous apprendrez à résoudre ce

problème au Chapitre 10.

SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}\and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/

Page 164: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 164/242

8

Publication de

contenu avec DAV 

Apache et la publicationde contenuSi vous proposez des services d'hébergement à d'autres

utilisateurs, il faut leur fournir une méthode efficace pour 

charger et entretenir leurs sites Web. Ce chapitre traite du

module mod_dav et indique comment le mettre en œuvre

pour offrir aux utilisateurs un moyen de gérer leur 

contenu. Nous donnons ici des explications sur les

méthodes qui restreignent l'accès en écriture à des res-

sources particulières, sur la manière de configurer diffé-

rents clients (y compris des dossiers Web de Windows),

ainsi que sur certains des problèmes les plus fréquents.

Vous trouverez également des informations sur la façond'activer des répertoires par utilisateur, de sorte que cha-

que utilisateur dispose de son propre espace sur le Web.

Page 165: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 165/242

152 CHAPITRE 8 Publication de contenu avec DAV 

Présentation de WebDAV WebDAV  signifie Web-based Distributed Authoring and 

Versioning . C'est un protocole qui prolonge HTTP et

permet aux utilisateurs de charger et de modifier leur 

contenu à distance. Pour apprécier la fabuleuse avancée

procurée par WebDAV, il est nécessaire de comprendre

les limitations des précédentes méthodes de publication.

Aux premiers temps du Web, les Webmestres et les admi-nistrateurs système éditaient le contenu d'un serveur 

directement à partir de la coque (shell ) en utilisant des édi-

teurs de texte, comme vi ou emacs. A mesure que le Web

a grandi, différents postes sont apparus : les administrateurs

entretenaient le serveur et les utilisateurs et les program-

meurs fournissaient le contenu. Des mécanismes étaient

nécessaires aux utilisateurs pour envoyer et modifier leur contenu. Or, cette séparation des tâches nécessitait des

règles de restriction d'accès et des méthodes simples à uti-

liser pour des non-techniciens. Les moyens permettant de

générer un contenu Web sont passés de simples éditeurs

de texte à des outils de publication sophistiqués, plus pro-

ches des traitements de texte en termes de fonctionnalités

et de simplicité d'utilisation.

Malheureusement, il n'existait pas de méthode standard

permettant aux uns comme aux autres de charger du con-

tenu. Les solutions étaient diverses : autoriser les utilisa-

teurs à accéder à la coque du système, ou bien employer 

le protocole FTP ou d'autres protocoles propriétaires.

L'accès à la coque exige que vos utilisateurs connaissent lesbases de la ligne de commande UNIX. Cela entraîne des

complexités et des problèmes de sécurité liés à l'autorisa-

tion de l'accès direct au serveur. L'emploi d'un client FTP

exige, d'une part que les utilisateurs téléchargent et installent

un outil supplémentaire, d'autre part qu'un serveur FTP

soit installé. Enfin, les scripts personnalisés, le chargement

Page 166: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 166/242

153Avantages de l'utilisation de mod_dav

des fichiers par l'intermédiaire de formulaires HTML et

les protocoles propriétaires (notamment ceux utilisés par 

Microsoft FrontPage) soulèvent plusieurs problèmes de

fonctionnement croisé et de sécurité.

WebDAV permet de contourner ces problèmes en pro-

posant un protocole standard qui peut être implémenté

dans le cadre du serveur Web. WebDAV prolonge le pro-

tocole HTTP avec de nouvelles méthodes pour permettre,

entre autres, la création, la suppression et le verrouillagede ressources à des fins d'édition. WebDAV est implé-

menté dans Apache avec mod_dav, qui est distribué sous

forme de module tiers pour Apache 1.3 et sous forme de

module intégré pour Apache 2.0.

Avantages de l'utilisationde mod_dav Nous l'avons vu à la section précédente, mod_dav est

implémenté sous forme de module Apache qui prolonge

le protocole HTTP. Il peut profiter de plusieurs fonctions

intégrées d'Apache, comme SSL pour le cryptage etl'authentification basée sur le certificat, l'authentification

de base HTTP, les serveurs proxy, etc. L'intégration dans

Apache offre de nombreuses autres possibilités, comme le

partage des mécanismes de contrôle d'accès et l'interaction

avec les moteurs de script, comme mod_perl et PHP.

Le protocole DAV lui-même est extensible. Même si lesressources accessibles par DAV résident généralement

dans le système de fichiers, DAV peut agir comme un

frontal fondé sur les normes pour toute une série de réfé-

rentiels d'arrière-guichet (comme les bases de données, les

systèmes de contrôle des versions et les structures de ges-

tion documentaire propriétaires).

Page 167: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 167/242

154 CHAPITRE 8 Publication de contenu avec DAV 

Par exemple, DAV intègre le concept des collections (à

savoir des groupes de fichiers), qui permet généralement

d'opérer un transfert vers un répertoire du serveur. Atten-

tion, cependant, cela peut prendre une signification tota-

lement différente pour d'autres systèmes d'arrière-guichet.

Enfin, WebDAV a été implémenté par la plupart des

structures de publication Web modernes, les suites Office

et les environnements de bureau.

WebDAV et le protocole HTTPDAV est implémenté au-dessus du protocole HTTP stan-

dard qui permet aux navigateurs et aux serveurs Web de

communiquer. Il prolonge les méthodes HTTP existantes

et en inclut de nouvelles, comme indiqué ici. Ces informa-

tions vous seront nécessaires pour implémenter le contrôle

d'accès et écrire sur des ressources activées pour DAV :

b COPY. Copie des fichiers ou des collections (l'équiva-

lent des répertoires du système de fichiers). Des en-têtes

supplémentaires permettent de spécifier la copie

récursive de collections imbriquées.

b MOVE. Déplace des fichiers et des collections.

b MKCOL. Crée une nouvelle collection. Si les collections

parentes n'existent pas, une erreur est renvoyée. Les

collections parentes doivent être explicitement créées

à l'aide de la méthode PUT.

b PROPFIND. Nous avons vu précédemment que les

ressources DAV pouvaient être associées à des infor-

mations de métadonnées. La méthode PROPFIND permet

d'interroger ces métadonnées.

Page 168: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 168/242

155Installation de mod_dav sous Apache 2.0

b PROPPATCH. Cette méthode permet de supprimer, de

créer et de modifier des métadonnées de ressources.

b LOCK et UNLOCK. Ces méthodes permettent de verrouiller 

une ressource. Elles servent, par exemple, à éviter 

qu'une ressource ne soit modifiée alors que vous l'éditez.

Le protocole DAV prolonge les méthodes HTTP existan-

tes, comme GET et PUT, principalement pour les avertir des

nouvelles fonctions de verrouillage. La méthode OPTIONSest prolongée pour rapporter les capacités DAV.

Installation de mod_dav  sous Apache 2.0

Apache 2.0 inclut mod_dav, même s'il n'est pas activé par 

défaut. Vous pouvez l'activer comme vous le feriez avec

n'importe lequel des autres modules intégrés. Par défaut, il

compile également l'arrière-guichet du système de fichiers

(--enable-dav-fs). Il est également possible de disposer d'autres arrière-guichets pour DAV, comme le système de

gestion de source et les bases de données Subversion.

Si vous utilisez la distribution Apache 2 Windows, sachez

que mod_dav y figure déjà sous forme de DLL. Il suffit

donc d'activer les directives LoadModule dans le fichier de

configuration httpd.conf :

LoadModule dav_module modules/mod_dav.so

LoadModule dav_fs_module modules/mod_dav_fs.so

./configure --enable-dav

Page 169: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 169/242

156 CHAPITRE 8 Publication de contenu avec DAV 

Installation de mod_dav  

sous Apache 1.3

Apache 1.3 ne dispose pas d'une prise en charge intégréede DAV. Il vous faut télécharger et installer  mod_dav,

comme vous le feriez avec n'importe quel autre module

tiers (voir l'extrait de configuration). Vous pouvez télé-

charger le code source UNIX et les binaires Windows

aux adresses http://www.webdav.org/mod_dav/ et

http://www.webdav.org/mod_dav/win32/.

Configuration WebDAV de base

La configuration de DAV est très simple. Il suffit de faire

figurer  DAV on à l'emplacement (ou dans la section de

répertoire) qui doit être accessible par DAV. L'exemple

montre comment activer DAV sur un site Web. DAV

possède son propre mécanisme de verrouillage et ne repose

pas sur la fonctionnalité du système de fichiers sous-jacent.

A noter qu'il est possible de préciser l'emplacement dufichier de verrouillage DAV, grâce à la directive DAVLockDB.

Il existe toutefois d'autres aspects de la configuration DAV

qui doivent être traités dans un environnement DAV de

production. Ils concernent la sécurité et le fonctionne-

ment croisé avec des clients tiers contenant des bogues.

Ces questions seront traitées aux sections suivantes.

tar xvfz mod_dav-1.0.3-1.3.6.tar.gzcd mod_dav-1.0.3-1.3.6./configure --with-apxs=/usr/local/apache/bin/apxsmakemake install

DAVLockDB /usr/local/apache/var/DAVLock<Location />Dav On

Page 170: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 170/242

157Sécurisation de votre configuration WebDAV 

Sécurisation de votre

configuration WebDAV 

Par défaut, l'activation de DAV présente un risque grave

pour la sécurité. Les utilisateurs seront en effet en mesure

de lire et de modifier le contenu Web (dont le source des

scripts CGI ou PHP, qui peut contenir des noms d'utili-

sateur et des mots de passe sensibles). Il est donc nécessaire

de protéger l'accès aux ressources activées par DAV. DAV

étant placé au-dessus du HTTP, cette procédure peut être

accomplie à l'aide de modules de contrôle d'accès Apache

standard. L'exemple montre comment exiger un mot depasse et un nom d'utilisateur valides pour accéder en écri-

ture à une ressource DAV, comme MKCOL. L'opération est

réalisée à l'aide de mod_auth (voir Chapitre 6) et de la

directive <LimitExcept>.

Listing 8.1 : Protection de l'accès DAV 

<Location />

Dav On

 AuthType basic

 AuthName "DAV Resource"

 AuthUserFile /usr/local/apache2/conf/htusers

<LimitExcept GET HEAD OPTIONS>

require user davuser

</LimitExcept>

</Location>

<LimitExcept GET HEAD OPTIONS>require user davuser</LimitExcept>

Page 171: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 171/242

158 CHAPITRE 8 Publication de contenu avec DAV 

<Limit> et <LimitExcept> sont deux directives de sections

permettant d'appliquer des paramètres de configuration

donnés à certaines méthodes de requête spécifiques. Même

si elles ne sont pas très utiles pour du HTTP ordinaire,

elles peuvent servir pour des configurations DAV. L'exem-

ple permet à tout le monde d'accéder au contenu Web en

employant des méthodes HTTP pures, mais restreint l'accès

DAV aux seuls utilisateurs autorisés.

Il existe d'autres mesures, comme l'exécution de DAV sur une instance séparée et à usage unique d'Apache. Ce ser-

veur Apache peut s'exécuter sur un port séparé, et être

facilement divisé et sécurisé. Vous pouvez également le

configurer pour qu'il exige un contrôle d'accès basé sur 

SSL ou IP, et ce afin d'obtenir une protection supplémen-

taire.

Accès aux ressources DAV depuis Microsoft OfficeLes versions récentes de Microsoft Office (comme

Office 2000 et Office XP) permettent d'ouvrir et d'éditer des documents à partir des serveurs activés par DAV,

notamment dans des versions récentes d'Exchange. Il suf-

fit de spécifier l'URL d'un emplacement activé par DAV

dans la boîte de dialogue Ouvrir de l'application, ou d'uti-

liser la boîte de dialogue d'ajout d'un nouvel emplacement

réseau (voir Figure 8.1). Une fois fait, vous pourrez faci-

lement créer, modifier et partager des documents sur le

serveur distant.

Page 172: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 172/242

159Accès aux ressources DAV depuis Microsoft Windows

Accès aux ressources DAV depuis Microsoft WindowsLes versions récentes des systèmes d'exploitation Microsoft

(comme Windows 2000 et Windows XP) assurent la prise

en charge de DAV par le biais des dossiers Web. Ceux-ci

assurent un accès transparent aux serveurs activés par DAV

en les présentant sous forme de dossiers du Bureau Win-dows. Les utilisateurs de Windows peuvent alors faire

glisser les fichiers vers ces dossiers, double-cliquer pour les

modifier, etc. Il est également possible d'accéder à une

ressource DAV sous forme de dossier Web sur une machine

Windows 2000, directement depuis Explorer ou en utili-

sant un assistant.

Figure 8.1 Ajout d'un favori réseau sous Microsoft Office.

Page 173: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 173/242

160 CHAPITRE 8 Publication de contenu avec DAV 

Dans la suite de cette section, nous supposerons qu'un ser-

veur Apache dessert le domaine www.exemple.com avec

une prise en charge DAV activée sous la section /davdocs

du site. Assurez-vous que la directive RedirectCarefully

appropriée soit en place (voir, plus loin, la section "Ges-

tion des clients présentant des bogues").

Ouvrez une fenêtre Internet Explorer. Cliquez sur le menu

Fichier et sélectionnez Ouvrir. Une fenêtre contextuelle

s'affiche (voir Figure 8.2).

Tapez l'URL suivante : http://www.exemple.com/

davdocs/. Cochez l'option Ouvrir en tant que dossier 

Web, et cliquez sur OK. Explorer se connecte à la ressource.

Vous devriez maintenant pouvoir créer des répertoires,

faire glisser des fichiers et les modifier (voir Figure 8.3).

L'emplacement est automatiquement ajouté au dossier 

Favoris réseau. Vous pouvez y accéder en cliquant sur 

l'icône de Bureau portant ce nom.

Vous pouvez également ajouter un dossier Web à l'aide

d'un assistant. Pour cela, accédez d'abord au dossier Favo-

ris réseau mentionné à la section précédente, cliquez sur 

l'icône Ajouter un favori réseau, puis suivez les instruc-

tions à l'écran.

Figure 8.2 Ouverture d'une ressourceDAV depuis Explorer.

Page 174: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 174/242

161Accès aux ressources DAV depuis Firefox

Accès aux ressources DAV depuis FirefoxA l'heure où nous écrivons ces lignes, Firefox n'assure

aucune prise en charge native pour accéder aux ressources

DAV. Toutefois, l'extension openwebfolder (sous Win-

dows uniquement) permet de se connecter au composant

Microsoft Windows WebDAV, ce qui procure l'accès aux

ressources DAV depuis Firefox. L'outil est disponible à

l'adresse http://openwebfolder.mozdev.org/.Pour l'installer, cliquez simplement sur le lien http://

open-webfolder.mozdev.org/installation.html

depuis Firefox et suivez les instructions. Une fois que

vous avez redémarré Firefox, cliquez du bouton droit sur 

Figure 8.3  Vue d'une ressource DAV.

Page 175: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 175/242

162 CHAPITRE 8 Publication de contenu avec DAV 

n'importe quelle page, puis sélectionnez "Open as Web

Folder" dans le menu contextuel pour y accéder par le

biais de WebDAV (voir Figure 8.4).

Accès à DAV depuis la lignede commande

Plusieurs clients à la ligne de commande sont disponibles

pour accéder aux ressources activées par DAV, ce qui sim-

plifie l'interactivité et l'intégration dans des scripts adminis-

tratifs. Ils peuvent servir de remplacements pour leurscontreparties FTP et scp. cadaver et sitecopy sont deux

des clients à la ligne de commande Open Source les plus

populaires. cadaver est une "coque interactive" qui propose

des commandes de style FTP, comme ls, put, get, etc.

Figure 8.4Ouverture d'un dossierWeb depuis Firefox.

./cadaverdav:!> open http://exemple.com

Page 176: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 176/242

163Accès à DAV depuis la ligne de commande

L'exemple montre comment utiliser cadaver pour accéder 

à un serveur Web activé par DAV, répertorier les ressources

disponibles et modifier un fichier distant :

./cadaver

dav:!> open http://exemple.com

dav:/> ls

Listing collection `/': succeeded.

Coll: images 0

Dec 7 2004Coll: styles 0

Dec 12 2004

Home.html 4816

 Aug 14 14:19

company.html 5352

Dec 7 2004

partners.html 6087

Dec 7 2004

solutions.html 3037

Dec 7 2004

dav:/> edit solutions.html

Locking `solutions.html': succeeded.

Downloading `/solutions.html' to

/tmp/cadaver-editzEzdL9.

html

Progress: [=============================>] 100.0% of

6230 bytes succeeded.

Running editor: `vi /tmp/cadaver-editzEzdL9.

html'...

Changes were made.

Uploading changes to `/solutions.html'

Progress: [=============================>] 100.0% of6232 bytes succeeded.

Unlocking `solutions.html': succeeded.

dav:/>

cadaver peut être téléchargé à l'adresse http://www.

webdav.org/cadaver.

Page 177: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 177/242

164 CHAPITRE 8 Publication de contenu avec DAV 

sitecopy permet de maintenir la synchronisation entre

une arborescence de documents locale et un serveur dis-

tant, à l'aide de plusieurs protocoles, notamment DAV. Il

peut être téléchargé à l'adresse http://www.lyra.org/

sitecopy.

Gestion des clients présentantdes bogues

Si vous ne parvenez pas à vous connecter à votre serveur 

DAV à l'aide des dossiers Web de Microsoft ou d'ancien-nes versions de dossiers virtuels Gnome, et que vous obte-

niez une mention semblable à :

"OPTIONS /davdocs HTTP/1.1" 301

dans votre journal d'accès, c'est que vous avez rencontré

un bogue avec certaines implémentations client de Web-

DAV. Apache envoie une redirection (HTTP code 301)

au client, mais celui-ci, dans la confusion, ne suit pas la

redirection. Apache propose un contournement à ce

comportement, en ignorant la redirection lorsque la varia-

ble d'environnement redirect-carefully est paramétrée.

Cet exemple (proposé dans le fichier de configuration

Apache par défaut) définit la variable d'environnementredirect_carefully pour deux clients WebDAV connus

pour rencontrer les problèmes mentionnés.

BrowserMatch "Microsoft Data Access InternetPublishing Provider" redirect-carefullyBrowserMatch "^gnome-vfs" redirect-carefully

Page 178: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 178/242

165mod_speling et DAV 

mod_speling et DAV Si vous utilisez DAV, vous devrez obligatoirement désac-

tiver mod_speling. En effet, ce module interfère avec plu-

sieurs opérations liées à DAV (comme la création de

nouvelles ressources) en les faisant correspondre par 

erreur à des fichiers existants si les noms sont similaires.

mod_speling sert à corriger les erreurs ou les fautes

d'orthographe de l'utilisateur (voir Chapitre 4).

Contenu dynamique et DAV 

Si vous accédez à des ressources générées dynamiquement

(comme des pages PHP ou des script CGI), vous risquez

de rencontrer ce problème : Apache renvoie ce contenu

généré dynamiquement, et non le code source du fichier.Autrement dit, vous obtenez le contenu du fichier après

qu'il a été traité par le serveur Web, et non le code source.

Pour contourner cela, vous pouvez lancer un serveur 

Web ou un hôte virtuel indépendant, sur lesquels la prise

en charge de PHP n'est pas activée (voir précédemment).

Vous pouvez aussi mettre en correspondance le chemindu système de fichiers avec différentes URL et activer ou

désactiver les modules de manière sélective. L'exemple

(extrait de la documentation DAV) montre comment

procéder. On oblige ici tout le contenu desservi par l'URL

/php-source à adopter le type text/plain, ce qui évite

l'exécution par le moteur PHP.

 Alias /php /usr/local/apache/php_files Alias /php-source /usr/local/apache/php_files

<Location /php-source>DAV OnForceType text/plain

</Location>

Page 179: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 179/242

166 CHAPITRE 8 Publication de contenu avec DAV 

Activation des pages

par utilisateur

Avez-vous déjà accédé à une URL du type http://www

.exemple.com/~joe ?

C'est ce que l'on appelle une "page Web par utilisateur".Chaque utilisateur du système se voit affecter une URL

qui commence par le signe ~, suivi de son nom. Quand

Apache trouve une requête de ce type, il la met en con-

cordance avec un chemin spécial dans le répertoire

d'accueil de l'utilisateur. Cette fonctionnalité permet à

chacun des utilisateurs de publier son propre contenu.

Elle est fournie par mod_userdir. Sachez que vous pouvez

l'activer ou la désactiver avec les directives de configura-

tion UserDir enabled et UserDir disabled. Vous pouvez

également spécifier une liste supplémentaire de noms

d'utilisateurs à activer ou à désactiver de manière sélective,

comme dans UserDir disabled mysql root.

Si le premier argument est différent de enabled ou disa-

bled, il sert à spécifier l'endroit où sont stockés les sites par 

utilisateur. Par exemple, UserDir public_html fera concorder 

une requête pour http://www.exemple.com/~utilisateur

avec /home/utilisateur/public_html/.

Le chemin peut aussi contenir un motif tel que :

UserDir /home/*/Web

qui correspondra à http://www.exemple.com/~utilisateur/

index.thml, à l'adresse :

/home/utilisateur/Web/index.html

UserDir enabledUserDir public_html

Page 180: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 180/242

167Autres répertoires utilisateur

Les répertoires par utilisateur doivent être lisibles pour 

l'utilisateur sous lequel Apache s'exécute.

Enfin, vous pouvez choisir de rediriger le client vers une

certaine URL. Par exemple :

UserDir http://www.exemple.com

fera concorder  http://www.exemple.com/~utilisateur/

index.thml avec :

http://www.exemple/user/index.html

Autres répertoires utilisateur

Si vous ne souhaitez pas activer mod_dir ou que vous ayez

besoin d'une fonctionnalité légèrement différente de ce qui

est proposé, vous pouvez envisager d'utiliser  mod_vhost

_alias ou mod_rewrite. L'exemple montre comment uti-

liser mod_rewrite pour faire concorder des requêtes desti-

nées à utilisateur.exemple.com au répertoire HTML par 

utilisateur qui convient.

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www\.)RewriteCond %{HTTP_HOST} ^([^.]+)\.exemple\.comRewriteRule ^(.*)$ /home/%1/public_html$1

Page 181: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 181/242

168 CHAPITRE 8 Publication de contenu avec DAV 

Résolution des problèmes

avec DAVLockDB

Si vous rencontrez un message de ce type, cela signifie

que vous devez fournir une directive DavLockDB dans lefichier de configuration, comme indiqué :

DAVLockDB /usr/local/apache/var/DAVLock

Si la directive est spécifiée mais que le répertoire conte-

nant le fichier de verrouillage ne soit pas inscriptible, vous

obtiendrez un message analogue à celui-ci :

The lock database could not be opened, preventing

access to the various lock properties for the

PROPFIND. [500, #0]

Vous devez résoudre les autorisations, de sorte que le che-

min de la directive DavLockDB possède des autorisations en

écriture, destinées à l'utilisateur sous lequel Apache s'exé-

cute.

No such file or directory: A lock database was notspecified with the DAVLockDB directive. One must bespecified to use the locking functionality. [500,#401]

Page 182: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 182/242

9

Performances

et évolutivité

Personnalisation d'ApacheCe chapitre décrit les options de configuration qui ris-

quent d'affecter les performances et l'évolutivité d'Apache

et indique la manière de les personnaliser. Heureusement,

dans la plupart des cas, cela ne sera pas nécessaire. En effet,

la plupart des problèmes de vitesse et d'évolutivité pro-

viennent généralement du moteur de génération de con-tenu dynamique ou de la couche de la base de données, et

non du serveur Web Apache lui-même. A noter que cer-

tains des problèmes et des solutions traités dans ce chapitre

sont suffisamment génériques pour s'appliquer à la plupart

des logiciels de serveurs, tandis que d'autres sont spécifi-

ques à Apache.

Page 183: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 183/242

170 CHAPITRE 9 Performances et évolutivité

Les performances et l'évolutivitéAméliorer les performances et l'évolutivité de n'importe

quel système informatique implique un mélange d'expé-

rience, de travail de profilage et de compréhension du

fonctionnement interne du serveur. Ce chapitre propose

plusieurs suggestions et idées pratiques pour vous aider à

démarrer. Pour clarifier les choses, sachez que les performan-

ces permettent de répondre plus rapidement aux requêtes,tandis que l'évolutivité consiste à desservir un grand nom-

bre de requêtes simultanément.

Personnalisation du matériel

Il est probable que l'action la plus importante qu'il soit

possible de réaliser pour améliorer les performances d'un

serveur consiste à augmenter la quantité de RAM. Cette

RAM supplémentaire permet au système d'exploitation

de mettre en cache des fichiers disque d'accès fréquent,

ainsi que de prendre en charge plusieurs enfants Apaches'exécutant simultanément.

Autre aspect à prendre en compte : la vitesse du disque.

Des disques rapides englobant de grandes quantités de

cache peuvent améliorer considérablement le problème

des charges. Vous pouvez également modifier différents

paramètres de commande, notamment en activant la priseen charge de Direct Memory Access pour votre lecteur. Sous

Linux, faites appel à l'utilitaire hdparm.

vmstat est un outil UNIX servant à dénicher les goulots

d'étranglement. Cet outil donne des informations sur les

procédures, la mémoire, le  paging , les entrées-sorties de

blocs, les pièges et l'activité de l'unité centrale.

vmstat

Page 184: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 184/242

171Elargissement des limites du système d'exploitation

Si vous utilisez SSL sur votre serveur et que vous deviez

prendre en charge plusieurs utilisateurs simultanés, l'opé-

ration peut consommer une grosse partie des ressources

de l'unité centrale. Un processeur plus rapide ou une carte

de cryptographie dédiée vous aideront dans ce cas.

Reportez-vous au Chapitre 7 et ("Amélioration des per-

formances SSL"), ainsi qu'au Chapitre 10, pour en savoir 

plus sur les paramètres à appliquer. Enfin, une machine

équipée de plusieurs unités centrales (ou d'unités centraleà cœurs multiples) améliore considérablement l'évoluti-

vité des serveurs Web basés sur les processus. Ce type de

machine est recommandé pour les hébergements de char-

ges moyennes à lourdes.

Elargissement des limitesdu système d'exploitation

Plusieurs facteurs du système d'exploitation peuvent empê-

cher l'adaptation d'Apache. Ces facteurs sont liés à la créationde processus, aux limitations de la mémoire et au nombre

simultané maximal de fichiers de connexion ouverts.

La commande ulimit d'UNIX permet de fixer plusieurs

des limites traitées dans les prochaines sections en fonction

du processus. Reportez-vous à la documentation de votre

système d'exploitation pour plus de détails sur la syntaxe

de ulimit.

ulimit

Page 185: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 185/242

172 CHAPITRE 9 Performances et évolutivité

Elargissement des limites

du système d'exploitationsur les processusApache propose des paramètres pour éviter que le nombre

de processus et de threads n'excède certaines limites. Ces

paramètres affectent l'évolutivité, car ils limitent le nom-

bre de connexions simultanées au serveur Web, ce qui

réduit ensuite le nombre de visiteurs auxquels vous pou-

vez répondre simultanément. Ces paramètres varient

selon les MPM (modules multitraitement). Ils sont décrits

en détail au Chapitre 11.

Les paramètres MPM d'Apache sont ensuite contraints par 

les paramètres du système d'exploitation, qui restreignent

le nombre de processus et de threads. Les étapesnécessaires pour modifier les limites varient selon les sys-

tèmes d'exploitation. Sous les kernels Linux 2.4 et 2.6,

vous pouvez accéder à la limite est accessible ; elle peut

être paramétrée au moment de l'exécution, en modifiant

le fichier /proc/sys/kernel/threads-max. Vous trouverez

le contenu de ce fichier à l'adresse :cat /proc/sys/kernel/threads-max

et pourrez écrire dessus en utilisant :

echo valeur > /proc/sys/kernel/threads-max

Sous Linux (à la différence de la plupart des autres versions

d'UNIX), il existe un mappage entre les threads et les pro-cessus, analogue pour le système d'exploitation. Sous Sola-

ris, ces paramètres peuvent être modifiés dans le fichier 

/etc/system. Ces modifications n'exigent pas de recons-

truire le kernel, mais peuvent demander un redémarrage

pour prendre effet. Vous pourrez modifier le nombre total

Page 186: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 186/242

173Augmentation des descripteurs de fichiers du système d'exploitation

de processus en modifiant l'entrée max_nprocs et le nom-

bre de processus autorisés pour un utilisateur donné, avec

maxuproc.

Augmentation des descripteurs defichiers du système d'exploitation

Dès qu'un processus ouvre un fichier (ou un socket), unestructure (appelée "descripteur de fichiers") est affectée

 jusqu'à ce que le fichier soit fermé. Le système d'exploita-

tion limite le nombre de descripteurs de fichiers qu'un

processus donné peut ouvrir, ce qui restreint le nombre

de connexions simultanées sur le serveur. Le moyen à

employer pour modifier ces paramètres dépend du sys-

tème d'exploitation. Sous Linux, vous pouvez lire ou

modifier /proc/sys/fs/file-max (en utilisant echo et cat,

comme indiqué à la section précédente). Sous Solaris, vous

devez modifier la valeur de rlim_fd_max dans le fichier 

/etc/system. Ces modifications nécessitent un redémar-

rage pour prendre effet.

Vous trouverez des informations complémentaires àl'adresse : http://httpd.apache.org/docs/misc/des-

criptors.html.

Contrôle des processus externes

Apache propose plusieurs directives pour contrôler la

quantité de ressources utilisées par les processus externes.

RlimitCPURLimitMemRLimitNProc

Page 187: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 187/242

174 CHAPITRE 9 Performances et évolutivité

Cela concerne les scripts CGI engendrés par le serveur et

les programmes exécutés via SSI. La prise en charge des

directives suivantes est disponible uniquement sous

UNIX et varie selon les systèmes :

b RLimitCPU. Accepte deux paramètres, la limite souple

et la limite dure, concernant le temps d'unité centrale

(en secondes) auquel un processus a droit. Si le mot

clé max est utilisé, il signale le paramètre maximal

autorisé par le système d'exploitation. La limite dureest optionnelle. La limite souple peut être modifiée

entre les redémarrages. La limite dure précise la valeur 

maximale autorisée pour ce paramètre. Si cela vous

semble confus, consultez le Chapitre 11, qui donne

des informations sur ServerLimit et MaxClients.

bRLimitMem. La syntaxe est identique à RLimitCPU, maiscette directive précise la quantité (en octets) de

mémoire utilisée pour chaque processus.

b RLimitNProc. La syntaxe est identique à RLimitCPU,

mais cette directive précise le nombre de processus.

Ces trois directives évitent que des programmes mal-

veillants ou mal écrits ne soient hors de contrôle.

Amélioration des performancesdu système de fichiers

L'accès au disque est une opération onéreuse en termes deressources ; c'est l'un des facteurs de ralentissement pour 

n'importe quel serveur. Si vous réduisez le nombre de fois

où Apache (ou le système d'exploitation) doit lire à partir 

du disque et écrire sur le disque, les performances peuvent

être considérablement améliorées. Les sections suivantes

Page 188: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 188/242

175Gestion de liens symboliques

traitent de certains des paramètres que vous pouvez per-

sonnaliser pour y parvenir. En outre, la plupart des systè-

mes d'exploitation modernes présentent des fonctions très

efficaces de mise en cache du système de fichiers, laissant

ainsi suffisamment de RAM à disposition ; ceci peut aussi

considérablement améliorer la vitesse d'accès aux fichiers

souvent appelés.

Montage de systèmes de fichiers,grâce à l'option noatime

De nombreux systèmes de fichiers Linux peuvent être

montés, grâce à l'option noatime. Cela signifie que le sys-

tème d'exploitation n'enregistre pas le dernier accès à un

fichier lors de sa lecture, même s'il conserve la trace de sa

dernière écriture. L'opération peut considérablement

augmenter la vitesse, en particulier pour des serveurs lour-

dement chargés. La ligne suivante montre un exemple

d'entrée /etc/fstab :

/dev/hda3 /www ext2 defaults,noatime 1 1

Gestion de liens symboliques

Sous UNIX, un lien symbolique (symlink) est un type de

fichier spécial qui pointe vers un autre fichier. Il est créé

avec la commande ln d'UNIX. Il permet de faire apparaî-tre un fichier donné à différents endroits.

FollowSymLinks et SymLinksIfOwnerMatch sont deux des

paramètres autorisés par la directive Options. Par défaut,

Apache ne suit pas les liens symboliques. En effet, ceux-ci

peuvent servir à contourner les paramètres de sécurité et

Options FollowSymLinks

Page 189: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 189/242

176 CHAPITRE 9 Performances et évolutivité

offrent un accès indésirable à des parties de votre système

de fichiers. Par exemple, vous pouvez créer un lien sym-

bolique, à partir d'une partie publique du site Web, vers

un fichier (ou un répertoire) restreint qui ne serait pas

autrement accessible par le Web. Ainsi, Apache doit, par 

défaut, procéder à une vérification pour s'assurer que le

fichier n'est pas un lien symbolique. Quand SymLinks-

IfOwnerMatch est présent, il suit un lien symbolique si le

fichier de destination appartient à l'utilisateur qui a créé celien. Ces tests devant être réalisés pour chaque élément

du chemin ainsi que chaque chemin faisant référence à un

objet du système de fichiers, ils peuvent être onéreux. Si

vous contrôlez la création du contenu, ajoutez une direc-

tive Options +FollowSymLinks à votre configuration et

évitez l'argument SymLinksIfOwnerMatch. De cette manière,

les tests n'auront pas lieu, et les performances ne seront pasaffectées.

Désactiver les fichiers de configurationpar répertoire

Nous l'avons vu aux précédents chapitres, les fichiers de

configuration par répertoire offrent une manière com-

mode de configurer le serveur et laissent un certain degré

de liberté à l'administration déléguée. Toutefois, si cettefonction est activée, Apache doit rechercher les fichiers

dans chaque répertoire, dans le chemin menant au docu-

ment desservi. Vous pouvez désactiver cette fonction en

ajoutant AllowOverride à votre configuration.

<Directory /> AllowOverride none</Directory>

Page 190: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 190/242

177Gestion de liens symboliques

Configurer la négociation du contenu

Nous l'avons vu à la section "Configuration de la négocia-tion du contenu", au Chapitre 4, Apache peut desservir 

différentes versions d'un fichier en fonction de la langue

ou des préférences du client. Cela peut être accompli avec

les extensions de fichiers mais, pour chaque requête, Apa-

che doit accéder au système de fichiers à plusieurs reprises,

à la recherche de fichiers possédant les extensions appro-priées. Si vous devez utiliser la négociation du contenu,

assurez-vous au moins d'utiliser un fichier de correspon-

dance de type, ce qui réduit les accès au disque.

Désactiver ou réduire la consignation

Sur les sites Web lourdement chargés, la consignation

peut considérablement ralentir le serveur. Vous pouvez

réduire son impact en ne consignant pas les accès à tout

ou partie des images (comme les boutons de navigation).

De plus, vous pouvez mettre les journaux en tampon

avant qu'ils ne soient écrits sur disque, à l'aide de la direc-tive BufferedLogs (comprise dans mod_log_config pour 

Apache 2 et versions ultérieures). Enfin, vous pouvez

décider d'utiliser des modules comme mod_log_spread

qui permettent de consigner sur le réseau plutôt que sur 

un disque local, ce qui améliore les performances. Vous

pouvez télécharger le modulemod_log_spread

à l'adressehttp://wwwbackhand.org/mod_log_spread.

BufferedLogs On

Page 191: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 191/242

178 CHAPITRE 9 Performances et évolutivité

Personnalisation du réseau

et des paramètres de statutPlusieurs paramètres Apache liés au réseau peuvent dégra-

der les performances. Les sections suivantes traitent des

plus importants.

HostnameLookups

Quand HostnameLookups est paramétré sur on ou double,

Apache réalise une recherche DNS pour capturer le nom

d'hôte du client, introduisant un délai dans la réponse au

client. Le paramètre par défaut vaut HostnameLookups off.

Si vous devez utiliser les noms d'hôtes, vous pouvez tou-

 jours traiter les journaux de requête avec un système de

résolution de journaux par la suite (voir Chapitre 3).

D'autres paramètres peuvent déclencher une recherche

DNS, même si HostnameLookups est réglé sur  off, par 

exemple lorsqu'un nom d'hôte est utilisé dans des règles

 Allow ou Deny (voir Chapitre 6).

Demander un mécanisme d'acceptation

Apache peut utiliser différents mécanismes pour contrôler 

la manière dont les enfants Apache arbitrent les requêtes.

Le mécanisme optimal dépend de la plate-forme spécifi-

que et du nombre de processeurs. Vous trouverez d'autresinformations à l'adresse http://httpd.apache.org/docs/

2.0/misc/perf-tuning.html.

HostnameLookups off

Page 192: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 192/242

179Personnalisation du réseau et des paramètres de statut

mod_status

Ce module collecte des statistiques sur le serveur, lesconnexions et les requêtes. Même s'il peut être utile pour 

dépanner Apache, il peut aussi ralentir le serveur. Pour obte-

nir des performances optimales, désactivez ce module, ou

vérifiez au moins que ExtendedStatus soit réglé sur off, le

paramètre par défaut.

AcceptFilter

Plusieurs systèmes d'exploitation, comme Linux et

FreeBSD, vous permettent de désigner certains socketsd'écoute comme gérant des protocoles spécifiques. Il est

ainsi possible de demander au kernel de ne transférer une

requête à Apache qu'une fois que tout le contenu de la

requête HTTP a été reçu, ce qui améliore les performan-

ces. Cette capacité n'est implémentée que dans Apache 2.1

et versions ultérieures, même s'il existe une version précé-

dente de la directive AcceptFilter, spécifique à BSD etprésente dans Apache 1.3.22 et versions ultérieures.

KeepAlive

HTTP 1.1 permet de desservir plusieurs requêtes sur une

seule connexion. HTTP 1.0 offre la même chose avec des

extensions de maintien en activité (keep alive ). La directive

KeepAliveTimeout permet de spécifier le délai maximal

 AcceptFilter http data AcceptFilter https data

KeepAlive OnKeepAliveTimeout 5

MaxKeepAliveRequests 500

Page 193: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 193/242

180 CHAPITRE 9 Performances et évolutivité

(en secondes) pendant lequel le serveur attend avant de

terminer une connexion inactive. Augmenter la tempori-

sation signifie que vous augmenterez les chances que la

connexion soit réutilisée. D'autre part, la connexion et le

processus Apache sont liés pendant le temps d'attente, ce

qui peut gêner l'évolutivité, comme indiqué précédem-

ment. La directive MaxKeepAliveRequest permet de spéci-

fier le nombre maximal de fois où la connexion sera

réutilisée.

Eviter les abus

Les attaques de refus de service submergent votre site

d'un grand nombre de requêtes simultanées, ce qui ralen-

tit le serveur et empêche d'accéder aux clients légitimes.

Ces attaques sont difficiles à éviter ; la manière la plusefficace de les traiter consiste généralement à agir au

niveau du réseau ou du système d'exploitation. Vous

pouvez, par exemple, empêcher des adresses spécifiques

de générer des requêtes sur le serveur ; vous pouvez blo-

quer ces adresses au niveau du serveur Web, mais il vaut

mieux procéder au niveau du pare-feu ou du routeur duréseau, ou encore avec les filtres réseau installés au niveau

du système d'exploitation.

Citons comme autres types d'abus l'envoi de requêtes

extrêmement volumineuses ou l'ouverture d'un grand nom-

bre de connexions simultanées. Vous pouvez également

TimeOutLimitRequestBody

LimitRequestFieldsLimitRequestFieldSizeLimitRequestLineLimitXMLRequestBody

Page 194: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 194/242

181Restriction des connexions et de la bande passante

limiter la taille des requêtes et des temporisations pour 

réduire l'effet des attaques. La temporisation par défaut

des requêtes est de 300 secondes, mais vous pouvez la

modifier à l'aide de la directive TimeOut. A noter que plu-

sieurs directives permettent de contrôler la taille du corps

de la requête et des en-têtes : LimitRequestBody, LimitRe-

questFields, LimitRequestFieldSize, LimitRequestLine

et LimitXMLRequestBody.

Restriction des connexionset de la bande passanteSi vous fournissez des services d'hébergement à plusieurs

clients, il est possible qu'un site Web dégrade les perfor-

mances du service dans son ensemble. Cela peut être dû

au fait que le site Web provient d'une page d'actualités à

fort trafic (effet dit "Slashdot ") ou qu'il héberge un ensem-

ble très demandé de fichiers musique ou vidéo. Plusieurs

modules Apache permettent de mesurer et de contrôler la

bande passante et le nombre de connexions, de sorte à

s'assurer que l'impact sur d'autres clients et sur le serveur dans son ensemble soit minimal. L'étranglement, dans ce

contexte, ralentit généralement la livraison du contenu

selon le fichier demandé, une adresse IP de client spécifi-

que, le nombre de requêtes simultanées, etc.

Le module mod_bandwidth d'Apache 1.3 autorise le para-

métrage des limites de bande passante sur tout le serveur ou

par connexions, en fonction du répertoire spécifique, de la

taille des fichiers, de l'adresse IP ou du domaine distant. Vous

trouverez ce module à l'adresse http://www.cohprog

.com/mod_bandwidth.html.

Page 195: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 195/242

182 CHAPITRE 9 Performances et évolutivité

Le module bandwidth share s'occupe de l'étranglement de

la bande passante et de l'équilibrage, en fonction de l'adresse

IP du client. Il est compatible avec Apache 1.3 et versions

antérieures d'Apache 2. Vous trouverez ce module à

l'adresse : http://www.topology.org/src/bwshare/

README .html.

Le module mod_throttle réduit la bande passante pour 

chaque hôte virtuel ou utilisateur, pour Apache 1.3. Vous

trouverez ce module à l'adresse : http://www.snert.com/Software/mod_throttle/index.shtml.

Le module Robotcop permet d'éviter que des robots n'accè-

dent à des parties de sites possédant des limites. Vous trouve-

rez ce module à l'adresse : http://www.robotcop.org/.

mod_require_host permet de limiter l'accès à ces clients

(par exemple à de nombreux vers IIS) qui ne fournissentpas d'en-tête d'hôte et tentent simplement de se connecter 

à votre adresse IP. Vous trouverez ce module à l'adresse :

http://www.snert.com/Software/mod_require

 _host/index.shtml.

mod_choke est un module destiné à Apache, qui restreint

l'utilisation en fonction du nombre de connexions simul-tanées par adresses IP et limite le débit auquel Apache

envoie des données au client. Vous trouverez ce module

à l'adresse : http://os.cyberheatinc.com/modules

.php?name= Content&pa=showpage&pid =7.

mod_tsunami permet de limiter le nombre d'enfants

Apache pour chaque hôte virtuel. Vous trouverez ce

module à l'adresse : http://sourceforge.net/projects/

mod-tsunami/.

Page 196: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 196/242

183Gestion des robots

Gestion des robots

Les "robots du Web" désignent une catégorie de pro-

grammes qui téléchargent des pages de votre site Web, en

suivant, de manière récursive, les liens qu'il contient. Des

moteurs de recherche sur le Web font appel à ces pro-

grammes pour parcourir Internet à la recherche de ser-veurs Web ; ils téléchargent leur contenu et l'indexent.

Un utilisateur lambda les exploite pour télécharger tout

ou partie d'un site Web, afin de le consulter hors con-

nexion ultérieurement. Généralement, ces programmes se

comportent bien, mais ils peuvent parfois être très agres-

sifs et inonder votre site d'un nombre de connexions

simultanées trop important ou s'enfermer dans des bouclescycliques.

Les robots traditionnels demandent un fichier particulier,

appelé robots.txt, qui contient des instructions sur la

manière d'accéder à votre site et sur les parties du site qui

ne seront pas disponibles.

La syntaxe du fichier se trouve à l'adresse http://www.robotstxt.org. Vous pouvez faire cesser les requêtes au

niveau du routeur ou du système d'exploitation.

Parfois cependant, les robots Web ne respectent pas le

fichier robots.txt. Vous pouvez alors utiliser le module

Apache Robotcop (mentionné à la section précédente) qui

permet d'arrêter les robots au comportement indélicat.

http://www.robotstxt.org/

Page 197: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 197/242

184 CHAPITRE 9 Performances et évolutivité

Proxy inverses et systèmes

d'équilibrage des charges

Nous avons parlé jusqu'à présent de l'évolutivité verticale,

qui montre comment améliorer les performances d'une

configuration de serveur unique. La distribution des char-ges sur plusieurs serveurs Web correspond à l'évolutivité

horizontale. Dans cet ensemble d'architectures, vous pou-

vez prolonger les capacités en ajoutant simplement de

nouvelles machines et en améliorant la quantité de trafic

auquel vous pouvez répondre, ainsi que la fiabilité de

votre configuration.

Le Chapitre 10 est consacré à l'utilisation d'Apache sous

forme de proxy inverse. Dans cette configuration, un ou

plusieurs serveurs frontaux légers traitent le contenu sta-

tique et gèrent les requêtes SSL et les connexions lentes,

tout en relayant les requêtes vers des URL spécifiques à

des serveurs d'arrière-guichet spécialisés. Plusieurs socié-

tés proposent des produits commerciaux qui implémen-tent cette fonctionnalité, en s'appuyant sur des structures

matérielles.

Enfin, le module mod_backhand (qui provient d'Apache 1.3)

assure une redirection dynamique des requêtes HTTP dans

une grappe de machines, en fonction des ressources dispo-

nibles.

mod_proxy_httpmod_backhand http://www.backhand.org/mod_backhand/

Page 198: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 198/242

185Mise en cache et compression

Mise en cache et compressionLe moyen le plus rapide de desservir du contenu consiste…

à ne pas le desservir du tout ! Vous pouvez pour cela

employer les en-têtes HTTP appropriés, qui indiquent

aux clients et aux proxy la validité temporelle des ressour-

ces demandées. De cette manière, certaines ressources qui

figurent sur plusieurs pages mais ne sont pas souvent modi-

fiées, comme les logos ou les boutons de navigation, sonttransmises une fois seulement pendant une période donnée.

De plus, vous pouvez utiliser mod_cache (voir Chapitre 10)

pour mettre en cache un contenu dynamique, de sorte

qu'il ne soit pas nécessaire de le créer pour chaque requête.

Cela peut considérablement améliorer les performances,

car le contenu dynamique doit généralement accéder aux

bases de données, traiter des modèles, etc., ce qui peut

consommer des ressources considérables.

Autre moyen de réduire la charge sur le serveur : diminuer 

la somme de données transférées au client. Cela accélère

ensuite l'accès au site Web de vos clients, en particulier 

pour ceux disposant de liens lents. Pour vous aider à réaliser 

cela, vous pouvez réduire le nombre et la taille de vos ima-ges. Vous pouvez automatiser une partie du traitement en

employant les outils de ligne de commande ImageMagick

(http://www.imagemagick.org). De plus, vous pou-

vez compresser les fichiers téléchargeables volumineux

(voire les fichiers HTML statiques) et utiliser la négociation

du contenu, comme indiqué aux précédents chapitres. Le

Chapitre 11 explique comment utiliser le module de fil-

trage mod_deflate pour compresser le contenu HTML.

Cela peut être utile si les ressources d'unité centrale sont

disponibles et que des clients se connectent sur des liens

ralentis. Le contenu sera livré plus rapidement et le proces-

sus sera libéré plus tôt pour répondre aux autres requêtes.

Page 199: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 199/242

186 CHAPITRE 9 Performances et évolutivité

Optimisations spécifiques

aux modulesComme indiqué au début de ce chapitre, la plupart des

étranglements ont lieu aux niveaux de l'accès à la base de

données et de la génération du contenu. Plusieurs modu-

les peuvent vous aider.

Ainsi, par exemple, FastCGI et mod_perl peuvent servir à

accélérer l'exécution d'un script CGI (voir la section "Amé-lioration des performances du script CGI", au Chapitre 4).

D'autre part, plusieurs systèmes de codage et d'optimisation

ont été créés pour PHP, le langage de développement Web

le plus populaire qui s'exécute sous Apache.

Alternatives à Apacheb lighttpd : http://www.lighttpd.net/

b thttpd : http://www.acme.com/software/thttpd/

b Boa : http://www.boa.org

Apache est un serveur Web portable, sûr et extrêmement

flexible. Pour cela précisément, ce n'est pas toujours la

meilleure solution dans toutes les situations. Les serveurs

indiqués ici sont optimisés et légers ; ils fonctionnent ou

évoluent souvent mieux qu'Apache concernant certaines

tâches. Ainsi, par exemple, des sites Web populaires

(comme Slashdot) emploient Apache exécutant mod_perl

pour générer du contenu et un serveur différent (commeBoa) pour desservir des images statiques. Cela s'accomplit

facilement en envoyant les images à partir d'un domaine

différent, par exemple images.slashdot.org.

Certains des projets comprennent également d'autres

fonctions populaires d'Apache, comme la réécriture des

URL et la prise en charge du PHP.

Page 200: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 200/242

10

Proxy Apache et

mise en cache

De l'utilité de la mise en cacheet des proxyHTTP est un protocole aussi simple que puissant. Ce cha-

pitre explique comment profiter de la mise en cache et des

fonctions de proxy qui permettent d'implémenter des

architectures flexibles et évolutives. La mise en cache per-

met de réduire simultanément la charge des serveurs et

d'allouer un accès plus rapide à votre site par un retour plus

rapide aux contenus fréquemment demandés. L'installation

d'un proxy permet de créer un point de contrôle pour 

toute requête HTTP, qui peut être utilisé pour unifier les

contenus provenant de divers serveurs d'arrière-guichet,

de manière à améliorer les performances.

Page 201: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 201/242

188 CHAPITRE 10 Proxy Apache et mise en cache

Proxy ordinaires et inversesIl existe différents types de proxy Web. Un proxy HTTP

traditionnel, aussi appelé proxy ordinaire, accepte des

requêtes de clients (généralement des navigateurs Web),

contacte le serveur distant et renvoie la réponse.

Un proxy inverse est un serveur Web placé devant les

autres serveurs, qui propose une façade unifiée et agit ainsi

comme une passerelle. Pour les navigateurs Web, le proxyinverse est le "vrai" serveur, car il est le seul à interagir 

avec lui. Il relaye les requêtes lorsque c'est nécessaire

 jusqu'aux serveurs d'arrière-guichet.

Différences entre Apache 1.3, 2.0et 2.2Dans Apache 1.3, la prise en charge de la mise en cache

faisait partie de mod_proxy et ne pouvait pas être utilisée

séparément. Dans la version 2.0, la fonction a été divisée

en deux modules distincts, même si le code en résultant

est considéré comme expérimental. La situation a changéavec les versions 2.1 et 2.2, où la fonctionnalité est désor-

mais considérée mature.

Page 202: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 202/242

189Activation de la prise en charge de mod_proxy

Activation de la prise en charge

de mod_proxy Apache 1.3

Pour activer la prise en charge des proxy dans Apache, vous

devez activer le module proxy principal et tout ou partie

des trois arrière-guichets pris en charge : HTTP, CONNECT et

FTP. L'option CONNECT permet aux connexions SSL de tran-

siter sans perte d'intégrité via le proxy. L'arrière-guichetFTP permet au serveur proxy d'agir en tant que passerelle

pour accéder aux serveurs FTP distants via un navigateur 

HTTP normal. Les versions 2.1 et supérieures d'Apache

incluent deux modules proxy additionnels : balancer, qui

fournit la prise en charge de l'équilibrage des charges, et

ajp

, qui assure la prise en charge du protocole AJP, fré-quemment utilisé pour communiquer avec Tomcat et

d'autres moteurs de servlet.

Activation de la prise en charge

des proxy ordinaires

--enable-module=proxy--enable-proxy--enable-proxy-connect--enable-proxy-ftp

--enable-proxy-http--enable-proxy-balancer (Apache versions 2.1 et ultérieures)--enable-proxy-ajp (Apache versions 2.1 et ultérieures)

ProxyRequests on<Proxy *>Order deny,allowDeny from all Allow from 10.0.0.0/255.255.255.0</Proxy>

Page 203: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 203/242

190 CHAPITRE 10 Proxy Apache et mise en cache

Les proxy ordinaires ont connu une grande popularité

aux premiers jours d'Internet, puisqu'ils permettaient à

plusieurs machines de partager facilement une con-

nexion vers le monde extérieur. La plupart des serveurs

proxy incluaient des fonctions de mise en cache, utiles

lors du partage de connexions lentes, et offraient une

isolation par rapport au monde extérieur. Les connexions

rapides et les NAT (Network Address Translation) intégrés

dans la plupart des dispositifs de passerelle ont considéra-blement réduit les besoins de proxy ordinaires. De nos

 jours, ils sont plus souvent implémentés dans des entre-

prises qui doivent contrôler la navigation de leurs

employés, utilisant le proxy pour consigner, filtrer et

autoriser les accès aux sites web. Cela commence à chan-

ger. A mesure que se multiplient les virus et les logiciels

espion, les entreprises mettent en place des proxy de fil-trage qui éliminent ces menaces avant qu'elles ne par-

viennent sur le bureau des utilisateurs. Les proxy ont

trouvé une nouvelle jeunesse dans le monde des réseaux

sans-fil, où ils servent de passerelles.

Vous pouvez activer les fonctionnalités des proxy ordi-

naires en utilisant ProxyRequests On, comme indiqué dansl'exemple. Il est conseillé de retreindre la prise en charge

du proxy uniquement aux clients autorisés (voir Chapi-

tre 6). Vous pouvez y parvenir en utilisant la directive de

section <proxy>. L'exemple montre comment restreindre

l'accès du proxy à un espace réseau spécifique.

Page 204: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 204/242

191Utilisation d'un proxy inverse pour unifier un espace URL

Utilisation d'un proxy inverse

pour unifier un espace URL

Un proxy inverse peut offrir un frontal unifié pour plusieurs

ressources d'arrière-guichet, en associant certaines URLsur la machine frontale à des serveurs Web d'arrière-gui-

chet spécifiques. Vous pouvez, par exemple, disposer d'un

serveur sur lequel tourne une application CRM et d'un

autre sur lequel tourne un outil de recherche de bogues.

Chaque fois que les utilisateurs doivent utiliser une appli-

cation, il leur faut taper une adresse différente. Vous pou-

vez intégrer ces services dans votre site principal, enutilisant ProxyPass, comme indiqué dans l'exemple.

Désormais, lorsque la machine de proxy inverse recevra

une requête pour  http://www.exemple.com/crm/login/

index.html, elle demandera http://crm.exemple.com/login/

index.html au serveur d'arrière-guichet et renverra le

document au navigateur.La directive ProxyPass peut être utilisée seule ou à l'inté-

rieur d'une section <Location>, ainsi que le montre l'exem-

ple suivant :

<Location /crm>

ProxyPass http://crm.exemple.com/

</Location>

Au final, vous pourrez utiliser ProxyPass simultanément

avec ProxyPassReverse, décrit à la section suivante.

ProxyPass /crm http://crm.exemple.com/ProxyPass /bugzilla

http://backend.exemple.com/bugzilla

Page 205: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 205/242

192 CHAPITRE 10 Proxy Apache et mise en cache

Masquage des serveurs

d'arrière-guichet

Au cours du processus décrit à la section précédente, le

client n'a contacté que le serveur de proxy inverse ; il nesoupçonne pas l'existence des serveurs d'arrière-guichet.

Parfois cependant, le serveur d'arrière-guichet émet des

pages de redirection ou d'erreur qui contiennent des réfé-

rences à lui-même, par exemple dans l'en-tête Location:.

La directive ProxyPassReverse intercepte ces en-têtes et

les réécrit de manière qu'ils contiennent une référence au

proxy inverse (www.exemple.com). Les directives Proxy-

PassReverseCookiePath et ProxyPassReverseCookieDomain

opèrent de façon analogue, mais sur le chemin et les chaî-

nes de domaine situés sur les en-têtes Set-Cookie:.

De plus, ProxyErrorOverride (uniquement disponible

dans Apache 2) permet d'afficher la page d'erreur du ser-

veur proxy, remplaçant ainsi les pages d'erreur reçues del'arrière-guichet. Cela permet de mieux masquer l'exis-

tence de ce serveur et d'obtenir un frontal constant, même

en cas de messages d'erreur.

Info

Sachez que la directive ProxyPassReverse  opère seulement auniveau de l'en-tête HTTP. Elle ne vérifie pas, ni ne réécrit lesliens qui sont contenus à l'intérieur des documents HTML. Afinde réaliser cela, vous pouvez utiliser mod_proxy_html, un moduleApache 2 qui permet de parcourir les documents desservis via leproxy et de réécrire le code HTML à la volée. Vous pouvez télé-charger ce module à l'adresse http://apache.webthing.com/ mod_proxy_html/ .

ProxyPass /crm http://crm.exemple.comProxyPassReverse /crm http://crm.exemple.comProxyErrorOverride On

Page 206: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 206/242

193Eviter l'inversion des URL en proxy

Eviter l'inversion des URL en proxy

Certaines URL peuvent ne pas être mises en proxy si

vous placez un point d'exclamation (!) sur l'URL du site

distant dans les directives ProxyPass. Il est important que

ces directives soient placées en aval des autres directives

ProxyPass.

Par exemple, la configuration montrée ici enverra toutes

les requêtes à un site d'arrière-guichet, à l'exception des

requêtes d'images, qui seront desservies localement.

Amélioration des performances

Les proxy inverses peuvent également être très utiles si

vous disposez de serveurs Web et de serveurs d'application

complexes et surchargés. Les clients lents des lignes par 

modem, les navigateurs présentant des bogues et les gros

fichiers multimédias peuvent mobiliser des ressources pré-

cieuses des serveurs créateurs de contenu. Si un client

requiert un gros fichier statique et le télécharge lentement,

un thread (ou un processus) enfant d'Apache sera occupé à

le desservir jusqu'au terme du téléchargement. Un scénario

analogue survient lorsqu'une implémentation TCP/IPboguée ne parvient pas à fermer correctement une con-

nexion au serveur à la fin d'une transmission. On appelle

ce phénomène un "problème de fermeture persistante".

ProxyPass /images/ !ProxyPass / http://crm.exemple.com

ProxyIOBufferSize 1024000

Page 207: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 207/242

194 CHAPITRE 10 Proxy Apache et mise en cache

Cela entraîne une mobilisation excessive des ressources

 jusqu'à ce que la connexion soit fermée pour cause de

dépassement du délai. Cependant, même si ces situations

sont rarement évitables, le vrai problème survient lorsque

vous utilisez des MPM basés sur les processus (tel le MPM 

Prefork). Ainsi, si vous employez mod_perl dans Apache 1.3

avec de nombreux autres modules Perl chargés et quel-

ques données mises en cache, les enfants Apache qui en

résultent auront probablement une taille de quelquesmégaoctets. Si l'un d'eux "perd du temps" à vouloir des-

servir un fichier statique ou attendre la fermeture d'une

connexion, moins de ressources seront disponibles pour 

servir les requêtes restantes. Un proxy inverse peut aider 

dans ce cas. Vous pouvez avoir un ou plusieurs frontaux

Apache légers, avec des threads, qui desservent des contenus

statiques et s'occupent des clients lents et bogués, ainsi quedes serveurs toutes fonctionnalités en arrière-guichet qui

s'occupent de générer le contenu dynamique. Vous pou-

vez personnaliser ProxyIOBufferSize de manière que les

gros fichiers soient transférés rapidement au proxy inverse

et que la connexion au serveur d'arrière-guichet soit libé-

rée aussi tôt que possible. Cela réduit la charge imposée au

serveur d'arrière-guichet mais accroît la consommation

de mémoire de la machine du proxy. Dans Apache 2.1,

de récents MPM permettent à un même enfant Apache de

gérer plusieurs connexions, avec possibilité d'avoir un

thread dédié dont la tâche consiste à attendre la fermeture

des connexions. Ces MPM, à mesure qu'ils mûrissent,

permettent à Apache de mieux évoluer dans bon nombrede situations.

Page 208: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 208/242

195Déchargement du processus SSL

Déchargement du processus SSLNous l'avons vu au Chapitre 7, "SSL et TLS", les calculs

requis font de SSL un protocole gourmand en ressources.

Cela peut avoir un impact sur les performances de votre

serveur d'arrière-guichet d'une manière similaire à celle

décrite dans la section précédente. Un moyen de résoudre

ce problème consiste à disposer de boîtes dédiées et opti-

misées faisant fonctionner un proxy inverse avec une priseen charge SSL. Le proxy inverse réalise l'ensemble des

opérations lourdes : il traite les requêtes SSL, peut éven-

tuellement faire les authentifications basées sur des certifi-

cats et transmet les requêtes en HTTP brut aux serveurs

d'arrière-guichet. Le contenu est généré et renvoyé au

proxy inverse, qui réalise la tâche (gourmande en ressour-

ces) consistant à le crypter. Puisque le point final du SSLest le proxy inverse, certaines informations (telles que celles

liées au certificat) sont perdues et n'atteignent pas le serveur 

d'arrière-guichet. La manière de réaliser cela est décrite

aux deux sections suivantes.

Transfert des informationsde proxy dans les en-têtes

Quand Apache agit en tant que proxy inverse, l'en-tête

Host: est modifié dans la requête de proxy pour corres-pondre au nom d'hôte spécifié dans la directive Proxy-

Pass. L'en-tête Host: original est placé dans un autre

en-tête, XForwarded-Host. Dans certaines situations, il est

préférable de préserver la valeur originale de l'en-tête.

ProxyPreserveHost on

Page 209: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 209/242

196 CHAPITRE 10 Proxy Apache et mise en cache

Cela peut être fait en activant ProxyPreserveHost on dans

le fichier de configuration.

Certaines informations de la requête sont perdues lorsqu'un

proxy inverse est installé. Celui-ci enregistre quelques-unes

de ces informations dans de nouveaux en-têtes qui sont

ajoutés à la requête faite au serveur d'arrière-guichet :

b X-Forwarded-For. Adresse IP ou nom d'hôte du client.

bX-Forwarded-Host. Hôte original demandé.

b X-Forwarded-Server. Nom d'hôte pour le serveur 

proxy.

Vous pouvez envoyer des informations supplémentaires

en utilisant les directives Header et RequestHeader, comme

indiqué à la section suivante.

Manipulation des en-têtes

Vous pouvez envoyer des informations supplémentaires à

un serveur d'arrière-guichet en utilisant la directive Hea-

der, fournie par le module mod_headers. Ce module peut

être utilisé pour ajouter ou supprimer des en-têtes arbi-

traires dans les requêtes et réponses HTTP.

Vous pouvez ajouter un en-tête HTTP de réponse, en

supprimant tout autre en-tête HTTP ayant le même nom et

pouvant être présent, en utilisant Header set, comme mon-tré dans l'exemple. Si vous voulez ajouter un nouvel en-tête

plutôt qu'en remplacer un existant, employez Header add.

Pour ajouter la valeur à un en-tête existant, effacer certains

en-têtes ou ajouter un en-tête de requête à la réponse,

adoptez respectivement append, unset et echo.

Header set nom-en-tete valeur-en-tete

Page 210: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 210/242

197Implémentation d'un proxy de cache

Vous pouvez modifier les en-têtes des requêtes envoyées

au client en utilisant RequestHeader au lieu de Header.

Vous pouvez ajouter le contenu de variables d'environne-

ment dans l'argument headervalue, à l'aide de la chaîne de

format %{nomvariable}e. Ce fonctionnement est sembla-

ble à celui de la directive LogFormat (voir Chapitre 3,

"Journaux et surveillance"). Par exemple, vous pouvez

l'utiliser pour transmettre des informations sur une con-

nexion SSL et des certificats au serveur d'arrière-guichet.Pour cela, vous devrez tout d'abord indiquer à mod_ssl de

stocker ces informations dans des variables d'environne-

ment, avec SSLOptions +StdEnvVars. Dans Apache 2.1,

vous pouvez passer cette étape et accéder directement aux

variables d'environnement SSL, avec %{nom-variable}s.

Implémentation d'un proxyde cache

L'un des avantages d'un proxy réside dans le fait qu'il est

capable de mettre en cache les informations qu'il dessert.

La prochaine fois que ce contenu sera demandé, le proxy

pourra vérifier qu'il est déjà présent dans son cache, et le

desservira alors directement. Dans Apache 1.3, la fonc-

tionnalité de mise en cache est implémentée dans le cadre

du module mod_proxy. Ces directives représentent un

exemple de configuration. CacheRoot permet de spécifier 

la localisation des fichiers mis en cache et CacheSize la

taille totale du cache (en kilo-octets). Il existe plusieurs

autres directives de configuration que vous pouvez utiliser 

pour modifier le comportement de la mise en cache.

CacheRoot /usr/local/apache/cacheCacheSize 500000

CacheGcInterval 6CacheMaxExpire 12

Page 211: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 211/242

198 CHAPITRE 10 Proxy Apache et mise en cache

CacheGcInterval permet de spécifier la fréquence (en heu-

res) à laquelle le cache sera périodiquement "purgé", afin

d'être en adéquation avec le réglage CacheSize. Cache-

MaxExpire spécifie le temps maximal pendant lequel un

document peut rester dans le cache et être toujours consi-

déré comme étant valable, sans avoir à être comparé à la

source originale.

Mise en cache dans Apache 2

La fonctionnalité de mise en cache et de mise en proxy

dans Apache a été séparée en deux modules distinctsdepuis Apache 2. Considérée comme étant expérimentale

dans Apache 2.0, la mise en cache est reconnue en tant

que fonctionnalité de qualité dans Apache 2.1/2.2.

Dans Apache 2, la principale fonctionnalité de mise en

cache est implémentée par mod_cache. Ce module possède

à son tour deux arrière-guichets : mod_mem_cache, qui stockeles ressources mises en cache directement en mémoire et

mod_disk_cache, qui utilise le système de fichiers. La

directive CacheEnable prend un paramètre d'arrière-gui-

chet de mise en cache (mem ou disk), ainsi qu'un préfixe

d'URL. Les requêtes qui contiennent le préfixe URL

seront mises en cache par l'arrière-guichet spécifique.

Vous pouvez utiliser  CacheDisable pour désactiver lamise en cache d'URL spécifiques. Il est également possi-

ble de recourir à l'utilitaire de ligne de commande htca-

checlean, afin de réduire le cache à intervalles prédéfinis

lors de l'utilisation de l'arrière-guichet disk.

CacheEnable disk /CacheRoot /usr/local/apache/cache

Page 212: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 212/242

199Equilibrage des charges

De même, si certains de vos fichiers sont fréquemment

demandés et si vous savez qu'ils ne changeront pas pen-

dant la durée de vie du serveur, vous pouvez utiliser 

mod_file_cache pour dire à Apache de mettre en corres-

pondance les fichiers spécifiques en mémoire ou de met-

tre en cache les gestions de fichiers :

CacheFile /usr/local/apache/htdocs/navigationbar.gif

MMapFile /usr/local/apache/htdocs/button_left.png

Si vous modifiez l'un des fichiers statiques, vous devrez

redémarrer le serveur pour que les changements prennent

effet.

Equilibrage des charges

Disponible depuis Apache 2.2, mod_proxy inclut un nou-

vel arrière-guichet qui offre des capacités d'équilibrage

des charges. Le code d'équilibrage des charges est géné-rique et permet d'équilibrer de multiples autres protoco-

les en plus du HTTP. Pour le configurer, vous devez

d'abord définir un groupe de serveurs d'arrière-guichet avec

une section <proxy balancer://...>, comme indiqué ici.

<Location /balancer-manager>SetHandler balancer-managerOrder deny,allowDeny from all Allow from localhost</Location><Proxy balancer://balancer/ stickysession=PHPSESSIONID>

BalancerMember http://www1.exemple.com/BalancerMember http://www2.exemple.com/BalancerMember http://www3.exemple.com/</Proxy>ProxyPass /content balancer://balancer/

Page 213: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 213/242

200 CHAPITRE 10 Proxy Apache et mise en cache

Une fois défini, vous pouvez utiliser l'ID du système

d'équilibrage avec une directive ProxyPass régulière. Cha-

que identifiant et élément du système d'équilibrage peut

prendre des options pour spécifier des stratégies d'équili-

brage (en fonction du trafic), des pannes, du pooling des

connexions (leur mise en commun) et de la prise en charge

des sessions.

Enfin, vous pouvez vérifier le niveau de votre configura-

tion, à l'aide de la commande régulière status, et la mani-puler, à l'aide de la commande balancer-manager.

Connexion à Tomcat

Depuis Apache 2, mod_proxy inclut un protocole d'arrière-

guichet AJP. Ce protocole est généralement utilisé par un

autre module Apache, mod_jk, pour communiquer avec

des serveurs d'applications et des moteurs de servlet, tels

que Tomcat et Jetty. Il est désormais possible de rempla-cer mod_jk par les modules mod_proxy et mod_proxy_ajp.

Vous bénéficiez ainsi de quelques-unes de leurs nouvelles

fonctionnalités dans mod_proxy, par exemple l'équilibrage

des charges. Comme indiqué dans l'exemple, la configu-

ration du support AJP dans mod_proxy est aussi facile que

de remplacer http:// par ajp:// dans les configurations

de proxy (y compris dans les configurations d'équilibragedes charges).

ProxyPass /myapp ajp://127.0.0.1:8009/myappProxyPassReverse /myapp ajp://127.0.0.1:8009/myapp

Page 214: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 214/242

201Autres proxy

Autres proxy

Nous l'expliquions au Chapitre 9, "Performances et évo-

lutivité", Apache n'est pas forcément le meilleur choix

dans tous les scénarios. Il existe ainsi plusieurs autres ser-

veurs proxy spécialisés qui pourraient fonctionner de façon

plus satisfaisante, selon vos besoins. Deux des serveurs

proxy Open Source les plus populaires se nomment

Pound et Squid :

b Squid est sorti à peu près au même moment qu'Apa-

che. Il est fortement configurable et excelle dans la

mise en cache.

b Pound est un serveur proxy léger, souvent utilisé

comme proxy inverse SSL.

Proxy HTTP transparents

Nous l'avons vu, un proxy ordinaire de mise en cacherequiert que chaque client soit correctement configuré. Il

est aussi possible d'implémenter des proxy dits "transpa-

rents". Ces machines interceptent les requêtes HTTP au

niveau de la couche réseau. Ensuite, de manière "transpa-

rente", elles les desservent au travers d'un serveur proxy

sans que l'utilisateur final ne s'en aperçoive. Les proxy

transparents sont toujours populaires auprès des FAI quiveulent réduire les coûts de bande passante ou contrôler les

habitudes de navigation de leurs clients. Certaines organi-

sations utilisent aussi des proxy transparents pour filtrer les

logiciels espion et les virus (voir, plus haut, la section

"Activation de la prise en charge des proxy ordinaires").

Squid http://www.squid-cache.org/Pound http://www.apsis.ch/pound/

Page 215: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 215/242

202 CHAPITRE 10 Proxy Apache et mise en cache

Une configuration type d'un proxy transparent fait appel à

un serveur averti de la mise en proxy transparente, tel que

Squid, et modifie les règles de transfert des paquets du sys-

tème d'exploitation. Pour plus d'informations sur la confi-

guration de proxy HTTP transparents, suivez ce lien de la

documentation de projet Linux :

http://www.tldp.org/HOWTO/Transparentproxy.html.

Page 216: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 216/242

11

Multitraitement

et modules deprotocole

Evolution de l'architecture ApacheApache n'est pas un serveur monolithique. De nouveaux

modules peuvent y être ajoutés, afin de fournir des fonc-

tionnalités avancées. De même, des modules existants peu-

vent en être retirés, de sorte à réduire la taille du serveur,

et ainsi améliorer les performances. Apache 2 prolonge ceconcept de modularité et introduit trois nouvelles voies

d'extension du serveur :

b Modules multitraitement (MPM). Permettent de

modifier la manière dont les serveurs Apache desser-

vent les requêtes. Améliorent les performances et

l'évolutivité du serveur.

b Modules de Filtrage. Permettent aux modules de

traiter le contenu fourni par d'autres modules.

b Modules de Protocole. La couche de protocole a été

analysée. Il est donc possible pour Apache de desservir 

un contenu utilisant d'autres protocoles, tels que FTP.

Page 217: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 217/242

204 CHAPITRE 11 Multitraitement et modules de protocole

Sélection d'un module

multitraitement

Même si la sélection du MPM dépend de plusieurs fac-

teurs (dont la prise en charge de modules et de fonction-

nalités tiers spécifiques), certains MPM se comportentmieux sur certaines plates-formes. Ainsi, les processus sur 

AIX étant "lourds", un MPM avec des threads sera préfé-

rable pour l'évolutivité qu'il apporte. Sachez toutefois

qu'il n'est pas possible de modifier le mécanisme de traite-

ment des requêtes dans Apache 1.3. Avec Apache 2, vous

sélectionnez un MPM pendant la configuration et vous

montez le processus avec l'option --with-mpm. Actuelle-ment, Windows possède ses propres MPM basés sur des

threads. Pour sa part, UNIX possède deux MPM stables :

prefork et worker. Plusieurs autres modules sont distribués

avec le serveur et utilisés à titre expérimental. Les sections

suivantes décrivent les fonctions des différents MPM et

indiquent la manière de les configurer.

Découverte des MPMbasés sur les processusAvec une configuration de serveur basé sur les processus,

le serveur procède à une "bifurcation" (un fork) sur plu-sieurs enfants. Cela signifie qu'un processus parent réalise

des copies identiques de lui-même, appelées des enfants.

Chacun des enfants peut desservir une requête indépen-

damment des autres. Cette approche présente l'avantage

--with-mpm=worker--with-mpm=prefork

Page 218: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 218/242

205Configuration de MPM Prefork

d'améliorer la stabilité : si l'un des enfants se comporte

mal, par exemple en perdant de la mémoire, il peut être

arrêté sans que cela n'affecte le reste du serveur.

L'amélioration de la stabilité s'accompagne d'une pénalité

au niveau des performances : chacun des enfants mobilise

de la mémoire supplémentaire, et le système d'exploita-

tion perd un certain temps à changer de contexte. De

plus, cette approche complique la communication entre

les processus et le partage de fichiers.

Apache 1.3 est un serveur basé sur les processus. Apa-

che 2, quant à lui, propose un MPM prefork qui lui permet

de fonctionner comme un serveur basé sur les processus.

Prefork signifie qu'un enfant peut être créé au démarrage,

plutôt que lorsqu'une requête arrive. A noter qu'Apache

permet de configurer le nombre d'enfants à établir audémarrage, ainsi que le nombre maximal d'enfants possi-

bles (voir section suivante).

Configuration de MPM Prefork

Vous pouvez contrôler le nombre de processus créés au

démarrage, à l'aide de la directive StartServers. Celle-ci

prend un argument unique, indiquant le nombre de ser-veurs à faire bifurquer lorsque le serveur démarre. La

valeur par défaut est 5 ; elle convient pour la plupart des

sites web. Ne modifiez ce réglage que si vous gérez un site

Web très fréquenté.

StartServers 5MinSpareServers 5MaxSpareServers 10MaxClients 150MaxRequestsPerChild 0

Page 219: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 219/242

206 CHAPITRE 11 Multitraitement et modules de protocole

MaxClients permet de contrôler le nombre maximal de

processus engendrés, dans la limite des capacités du sys-

tème d'exploitation ou en fonction du nombre maximal

d'enfants possibles. Dans Apache 1.3, le nombre maxi-

mal d'enfants possible est codé en dur à 256. Pour modi-

fier cette valeur, vous devez intervenir sur le réglage

HARD_SERVER_LIMIT dans httpd.h, puis recompiler le ser-

veur. Dans Apache 2, cette valeur peut être modifiée dans

la configuration, en utilisant la directive ServerLimit.La directive MinSpareServers définit le nombre maximal

de processus pouvant rester inactifs (les requêtes ne sont

pas traitées) à un moment donné. Si le nombre de ser-

veurs inactifs descend sous cette valeur, Apache engendre

de nouveaux enfants. A l'inverse, MaxSpareServers fixe

le nombre maximal de processus inactifs autorisés.Si le

nombre de serveurs inactifs dépasse ce réglage, certains

d'entre eux sont arrêtés. La valeur par défaut, présentée

dans l'exemple, devrait être suffisante pour la plupart des

serveurs.

Au final, vous pouvez limiter le nombre de requêtes

traitées par un processus spécifique, en utilisant la direc-

tive MaxRequestsPerChild. Sachez qu'elle ne dénombre pasles requêtes multiples qui réutilisent la même connexion.

Comme expliqué précédemment dans ce chapitre, cela

permet d'éviter les fuites de mémoire pour des processus

qui fonctionnent depuis un long moment. Le serveur 

arrête le processus et le remplace par un nouveau, après

le nombre spécifié de requêtes. Vous pouvez fixer la valeur 

de MaxRequestsPerChild sur 0 pour empêcher que les pro-

cessus ne soient arrêtés après un nombre défini de requêtes.

Page 220: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 220/242

207MPM basés sur des threads et MPM hybrides

MPM basés sur des threads

et MPM hybridesLes threads sont semblables aux processus, mais ils peu-

vent partager de la mémoire et des données avec d'autres

threads. Cela présente l'avantage de ne pas nécessiter de

changement de contexte (les threads font partie du même

processus). Toutefois, l'inconvénient est qu'un code mal

écrit peut faire tomber le serveur. En effet, un thread secomportant mal est capable d'écraser et de corrompre des

données ainsi que du code appartenant à d'autres threads.

Le MPM Apache, destiné à la plate-forme Windows, est

un exemple de MPM de serveur basé sur les threads. Les

serveurs basés sur des processus ou des threads présentent

chacun des avantages et des inconvénients. Les déve-loppeurs d'Apache ont créé un MPM basé sur des threads,

MPM  Worker , qui autorise une approche mixte. Un ser-

veur peut engendrer différents processus, chacun conte-

nant plusieurs threads.

Configuration de MPM Worker

Le MPM Worker est un MPM Apache 2 qui permet de

combiner les processus et les threads. Vous pouvez spéci-

fier le nombre de processus qui seront créés au démarrage,

en utilisant la directive StartServers, comme avec le MPM

Prefork. Chacun des processus possédera plusieurs threads ;

ce nombre sera spécifié par la directive ThreadsPerChild.

StartServers 2MaxClients 150MinSpareThreads 25MaxSpareThreads 75ThreadsPerChild 25MaxRequestsPerChild 0

Page 221: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 221/242

208 CHAPITRE 11 Multitraitement et modules de protocole

Le nombre de threads dans chaque processus est fixé, mais

les processus sont créés ou détruits, afin de maintenir le

nombre total de threads dans les limites spécifiées. Ces

limites peuvent être configurées en utilisant les directives

MinSpareThreads et MaxSpareThreads. Ce sont les contre-

parties des directives MaxSpareServers et MinSpareServers

dans les serveurs basés sur les processus.

Apache surveille le nombre total de threads sur tous les

processus et crée ou détruit les processus en conséquence.A l'instar du Prefork, MaxClients spécifie le nombre maxi-

mal de processus. Dans le MPM Worker, chaque proces-

sus possède plusieurs threads. Le nombre maximal de

clients simultanés est donc MaxClients fois le réglage de

ThreadsPerChild. MaxThreadsPerChild spécifie le nombre

maximal de threads par processus ; il peut être modifié

entre chaque redémarrage. ThreadLimit spécifie une

limite supérieure qui ne peut être modifiée entre les redé-

marrages. Les directives StartServers et MaxClients sont

identiques à celles décrites à la section "Configuration de

MPM Prefork".

Autres MPM

Apache 2 comprend plusieurs MPM supplémentaires,

désignés comme étant expérimentaux. Deux des plusintéressants sont le MPM Event et le MPM Perchild. Le

MPM Event, présent uniquement dans Apache 2.1, est

une variante du MPM Worker. Dans ce MPM, un thread

séparé gère tous les sockets d'écoute et les connexions

de maintien en activité. Cela accroît considérablement

l'évolutivité, les threads restants pouvant traiter des requêtes

au lieu d'attendre que le client ferme une connexion ou

--with-mpm=event--with-mpm=perchild

Page 222: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 222/242

209Description des filtres Apache 2

émette une nouvelle requête. Ce MPM résout certains

problèmes décrits au Chapitre 10, "Proxy Apache et mise

en cache". Le MPM Perchild permet à Apache de faire

tourner différents hôtes virtuels sous divers ID utilisateurs.

Cela peut aider à améliorer la sécurité et fournit une alter-

native à l'exécution d'instances de serveurs séparées.

Enfin, le MPM Metux fournit une alternative au MPM

Perchild. Il peut être téléchargé à l'adresse http://www

.metux.de/mpm.

Description des filtres Apache 2

Vous pouvez vous représenter l'architecture de filtrage

dans Apache comme une ligne d'assemblage d'usine. Les

filtres correspondent à des employés ; les requêtes et les

réponses sont les objets transportés sur la ligne. Chaque

filtre traite le contenu et transmet le résultat au filtre suivant.Les filtres peuvent traiter de l'information de diverses

manières. Nombre de modules Apache sont implémentés

sous forme de filtres, tels que SSL, SSI et sous forme de

compression. Les filtres peuvent être automatiquement

ajoutés par les modules au moment de l'exécution ou

réglés dans le fichier de configuration.

L'exemple montre comment utiliser SetOutputFilter pour 

ajouter deux filtres à tous les documents d'un répertoire

particulier et AddOutputFilter pour associer des filtres à

des extensions de fichier particulières. De plus, AddOut-

putFilterByType peut être utilisé pour associer des filtres à

des types de fichiers spécifiques.

<Directory /usr/local/apache/htdocs/>SetOutputFilter INCLUDES;PHP

</Directory> AddOutputFilter INCLUDES .inc .shtml

Page 223: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 223/242

210 CHAPITRE 11 Multitraitement et modules de protocole

Si plusieurs directives, comme AddOutputFilter et SetOut-

putFilter, s'appliquent au même fichier, les listes de filtres

des deux directives sont fusionnées. Les filtres d'entrée

peuvent être configurés par le biais des directives AddInput-

Filter,  AddInputFilterBytype et SetInputFilter, qui

présentent une syntaxe identique aux filtres de sortie

équivalents.

Apache 2.1 et 2.2 proposent le module mod_filter qui

offre une plus grande flexibilité pour définir et manipuler les chaînes de filtres. Cela peut être réalisé, par exemple,

en fonction de l'existence d'un en-tête HTTP particulier 

ou d'une variable d'environnement.

Utilisation d'Apachecomme serveur FTP

Comme indiqué précédemment dans ce chapitre, Apa-che 2 est bien plus qu'un simple serveur Web, c'est une

structure de serveur générique. En montant un serveur 

par-dessus Apache, un développeur bénéficie d'une infra-

structure solide et portable, d'un mécanisme d'extension

et de la possibilité d'utiliser de nombreux modules tiers

Listen 10.0.0.1:21<VirtualHost 10.0.0.1:21>FTP OnDocumentRoot /usr/local/apache/ftpdocsErrorLog /usr/local/apache/logs/ftp_error_log<Location /> AuthName "FTP" AuthType basic AuthUserFile /usr/local/apache/conf/htusersRequire valid-user</Location></VirtualHost>

Page 224: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 224/242

211Utilisation d'Apache comme serveur POP3

créés pour Apache. C'est le cas de mod_ftp, qui ajoute des

capacités FTP à Apache. La plupart des paramètres de

configuration (notamment les directives d'authentification)

sont partagés avec le reste du serveur. Vous pouvez acti-

ver la prise en charge FTP en ajoutant simplement FTP On

dans la section Virtual Host appropriée. D'autres directives,

comme FTPUmask, FTPTimeoutLogin, FTPBannerMessage et

FTPMaxLoginAttempts, permettent de configurer des fonc-

tions communes avec d'autres serveurs FTP.A l'heure où nous écrivons ces lignes, mod_ftp est en passe

de devenir un projet ASF officiel. Il peut dorénavant être

téléchargé à l'adresse http://incubator.apache.org/

projects/mod_ftp.html.

Utilisation d'Apache commeserveur POP3

Ce module permet à Apache 2 d'agir comme serveur POP3. POP3 (Post Office Protocol , version 3) est fréquem-

ment utilisé, notamment parce qu'il permet aux clients de

messagerie (comme Outlook, Eudora ou Netscape Mail)

de récupérer des messages à partir d'un serveur central.

Listen 110<VirtualHost *:110>POP3Protocol on

POP3MailDrops /usr/local/apache/pop<Directory /usr/local/apache/pop> AuthUserFile /usr/local/apache/conf/htusers AuthName pop3 AuthType BasicRequire valid-user</directory></VirtualHost>

Page 225: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 225/242

212 CHAPITRE 11 Multitraitement et modules de protocole

Sachez que ce module n'autorise pas les systèmes de lec-

ture de courrier d'envoyer des messages. Pour cela, il vous

faudra un serveur SMTP (Simple Mail Transfer Protocol ),

comme Sendmail ou PostFix. Pour activer la prise en

charge de POP3, placez une directive POP3Protocol  On

dans la section d'hôte virtuel appropriée. POP3MailDrops

précise l'emplacement des boîtes de réception des utilisa-

teurs. L'utilisateur sous lequel Apache s'exécute doit pou-

voir lire et écrire sur ces boîtes de réception.Vous pouvez télécharger mod_pop3 à l'adresse http://svn

.apache.org/viewcvs.cgi/httpd/mod_pop3/.

Compression de contenu

à la volée

Le module de filtrage mod_deflate (Apache 2) propose un

filtre, DEFLATE, capable de compresser les données sortantes.

La compression peut consommer beaucoup de ressourcesde l'unité centrale, mais elle présente l'avantage de réduire

la quantité de données qui seront transférées vers le client.

Cela est utile lorsque les clients se connectent à Internet par 

le biais de liens lents et que le contenu peut être consi-

dérablement compressé, comme avec les pages HTML.

#Apache 2 mod_deflate AddOutputFilterByType DEFLATE text/html text/plaintext/xmlSetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$no-gzip dont-varyBrowserMatch ^Mozilla/4 gzip-only-text/html

#Apache 1.3 mod_gzipmod_gzip_static_suffix .gz AddEncoding gzip .gzmod_gzip_item_include file \.html$

Page 226: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 226/242

213Compression de contenu à la volée

D'autres contenus déjà compressés, comme des fichiers

ZIP ou des images JPEG, ne profiteront que très peu

(voire pas du tout) d'une compression supplémentaire.

Bien entendu, pour que la compression du contenu fonc-

tionne, le client doit prendre en charge la fonctionnalité

opposée : la décompression. Cela vaut également pour les

navigateurs les plus modernes.

Si un client spécifique rencontre des problèmes pour trai-

ter un contenu compressé d'un certain type, vous pouvezparamétrer la variable d'environnement no-gzip, en utili-

sant les directives SetEnvIf ou BrowserMatch. Cela empê-

chera mod_deflate de compresser le contenu délivré au

client, comme indiqué dans l'exemple.

Apache 1.3 propose un module équivalent, mod_gzip,

capable de compresser un contenu dynamique et statique.Vous le trouverez à l'adresse http://sourceforge.net/

projects/mod-gzip/.

Page 227: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 227/242

Page 228: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 228/242

I    N D E  X 

215

Index

A

AcceptFilter 179

Accès

contrôler 101, 104, 110, 150

interdire 43, 109

limiter 108, 119

protéger 115

protéger pour DAV 157

refus 111

refus pour les fichiers sensibles

113

serveur 127

access_log 46

AccessFilename 99

Action 68, 71

Activation d'un proxy 189

AddDefaultCharset 80

AddHandler 68

AddModule 18

Adresse IP

autoriser l'accès 108

consigner 56

déjà utilisée 34

interdire l'accès 109

modifier 14résoudre 56

Affectation

 jeux de caractères 80

langue 80

Affichage du contenu d'une

requête 137

Alias 64

AliasMatch 17, 64

Allow 104, 119

AllowOverride 99Amélioration

évolutivité 170

performances 170, 193

Analyse du journal 53

Apache

authentification 122

autres solutions 186

caractéristiques 3enfants 205

installation 5

sous UNIX et Linux 6, 7

sous Windows 8

POP3 211

versions 4

apachetop 53

Application, authentification121

apxs 19

Architecture Apache 203

Archivage des journaux 55

Arguments

FollowSymLinks 175

SymLinksIfOwnerMatch 175

Arrêtdu serveur 12

serveur 32

Arrière-guichet

CONNECT 189

FTP 189

HTTP 189

masquer 192

Page 229: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 229/242

      I      N      D      E      X

216 Authentification

Authentification 102, 105 

Apache 2.2 122

application 121certificats 147

de base 103

digest 103

modules 120

processus 102

AuthGroupFile 107

AuthName 105

AuthType 105AuthUserFile 105

Autorisation 105

fichier 126

Require 107

Autorité de certification 134, 146

Auto-signé, certificat 137

Avertissement (accès par

SSL) 146

B

Bande passante

restreindre 181

vol 117

bandwidth_share 182

Barre oblique finale 81

Base de données

consigner dans 54

utilisateur 106

BindAddress 15

Bogues

clients 164

contourner pour SSL 149

BrowserMatch 76

BufferedLogs 177

C

CA 134

Cache 185

Apache 2 198

mise en 188

mod_cache 198

proxy 197

cadaver 162

Caractères, jeux de 80

Carte (cryptographie) 144

Casse, problèmes de 83

Certificat 130, 134

authentifier 147

auto-signé 137

créer 146

importer 147

requête de signature 135

CGI

améliorer les performances 72

dépannage 72

exécutables 70

exécution 69

Charges (équilibrage) 199

Clé

cryptage 132

cryptographie symétrique 132

openssl 133

paire 133

privée 132

protégée 134

publique 132, 134

supprimer le mot de passe 134

ClearModuleList 18Client

comportant des bogues 164

préférences 77

Page 230: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 230/242

I    N D E  X 

217DAVLockDB

Commande

configure 18

killall 32status 200

ulimit 171

Compilation (SSL) 140

Compression des données

sortantes 212

Configuration

désactiver les fichiers 100

fichier principal 9, 10fichiers multiples 11

fichiers par répertoire 98

hébergement virtuel 89, 91

hôte virtuel 92, 93

minimale 140

négociation du contenu 78

sécuriser pour DAV 157

SSI 74tester 29

WebDAV 156

configure, commande 18

CONNECT 189

Connexion

démon du journal système 27

restreindre 181

serveur 41surveiller 50

Tomcat 200

Consignation

adresses IP 56

conditionnelle 49

désactiver 177

format combiné 48

format commun 47requête 46

vers une base de données 54

Contenu

configurer la négociation 177

desservi par SSL 144

dynamique et DAV 165

gestionnaire 67

négociation 77publier 20, 151

Contrôle

accès 101, 104, 110, 119, 150

processus externes 173

Correction URL erronée 82

Correspondance de type 79

Création

base de données utilisateur 106CA 146

certificat client 146

icône 16

Cryptage 132

Cryptographie

asymétrique 132

carte 144

clé publique 132symétrique 132

CustomLog 48, 59

D

DAV 153

accès depuis Firefox 161

accès depuis la ligne de

commande 162

accès depuis Office 158

accès depuis Windows 159

cadaver 162

configurer 156

contenu dynamique 165

mod_speling 165

protéger l'accès 157

sécuriser la configuration 157

sitecopy 164

DAVLockDB 168

Page 231: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 231/242

      I      N      D      E      X

218 Débogage

Débogage 33

hôtes virtuels 95

mod_logio 33mod_loopback 33

mod_tee 33

mod_trace_output 33

Déchargement (SSL) 195

Décryptage 132

_default_ 93

DefaultLanguage 80

Démarrageavec SSL 141

du serveur 12

serveur 41

Démon (journal système) 27

Deny 104, 119

Dépannage 33

accès interdit 43

connexion au serveur 41démarrage du serveur 41

document introuvable 42

erreur interne 44

scripts CGI 72

Désactivation

consignation 177

exécution CGI 125

exécution SSI 125fichiers de configuration 100

fichiers de configuration par

répertoire 176

listings de répertoire 115

Descripteur de fichier 173

Digest, authentification 103

Directives 11

AcceptFilter 179AccessFilename 99

Action 68, 71

AddDefaultCharset 80

AddHandler 68

AddModule 18

Alias 64

AliasMatch 17, 64

Allow 104, 119AllowOverride 99

AuthGroupFile 107

AuthName 105

AuthType 105

AuthUserFile 105

BindAddress 15

BrowserMatch 76

BufferedLogs 177ClearModuleList 18

CustomLog 48, 59

DefaultLanguage 80

Deny 104, 119

DirectoryIndex 115

DirectorySlash 82

DocumentRoot 20, 89

ErrorDocument 93, 111ErrorLog 26

ExtendedStatus On 51

Group 15

Header 196

HostNameLookups 56

Include 11

KeepAliveTimeout 179

LanguagePriority 80Listen 14, 141

LoadModule 17, 20, 155

LogFormat 46

LogLevel 27

MaxRequestsPerChild 206

MaxSpareServers 206

MinSpareServers 206

NameVirtualHost 91Options 114

Options +ExecCGI 70

Options +Multiviews 78

Order 104, 120

PassEnv 75

Page 232: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 232/242

I    N D E  X 

219Event

POP3Protocol On 212

Port 15

ProxyPass 191ProxyPassReverse 192

ProxyRequests 190

Redirect 65

RedirectMatch 66

RemoveHandler 68

RequestHeader 197

Require 105

RLimitCPU 174RLimitMem 174

RLimitNProc 174

Satisfy 110

Satisfy all 110

Script 71

ScriptAlias 70

ScriptLog 72

sections 22, 23ServerName 16, 89

ServerRoot 11

ServerTokens 116

SetEnv 74

SetEnvIf 75

SetFilter 84

SetHandler 68

SSLCryptoDevice 144SSLEngine 141

SSLRequire 150

SSLVerifyClient 147

StartServers 205

TimeOut 181

TransferLog 48

UnsetEnv 75

User 15, 126 VirtualDocumentRootIP 97

 VirtualScriptAliasIP 97

DirectoryIndex 115

DirectorySlash 82

Disque, vitesse 170

Document introuvable 42

DocumentRoot 20, 89

E

Echec de la redirection 67

En-tête

fin prématurée 39

Host 90, 195

malformé 39

manipuler 196

proxy 196

Server 116

Entrée de journal 60

Environnement, variables 74

accéder à 75

paramétrer 75

spéciales 76

Equilibrage des charges 199

Erreur

adresse déjà utilisée 34

de segmentation 38

de syntaxe 34

en-tête malformé 39

fin prématurée d'en-tête 39

interne 38, 44

 journal 26

 journalisation 40

liaison impossible 35

module non compatible 35

niveau 27

ouverture de fichier 36

quantité d'informations 27

redirection 40

refus d'accès 37

résolution de nom 36

error_log 46

ErrorDocument 93, 111

ErrorLog 26

Event 208

Page 233: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 233/242

      I      N      D      E      X

220 Evolutivité du système

Evolutivité du système 170

Exécution

désactiverCGI 125

SSI 125

restreindre de programmes 114

Exemples, supprimer 125

Expression régulière 66

Expressions régulières 22

ExtendedStatus On 51

F

FastCGI 73

Fautes de frappe, corriger 82

favicon.ico 16, 60

Fichier

améliorer les performances

du système 174

configuration 9, 10, 11

configuration par répertoire

désactiver 176

favicon.ico 16, 60

htaccess 98

httpd.pid 61

 journal 46

robots.txt 60

sensibles

refuser l'accès 113

vérifier les autorisations 126

Filtres 209

Firefox, accès à DAV 161

FollowSymLinks 175

Format

combiné 48

consignation 47

FTP 189

Fusion de journaux 58

G

Gestionnaire

contenu 67

Graceful, redémarrage (en

douceur) 14

Group 15

H

Header 196

Hébergement

virtuel 87

sur IP 88, 89

sur le nom 90, 91

Host 90

en-têtes 195

HostNameLookups 56HostnameLookups 178

Hôte

 journal 59

mélanger 94

SSL 96

virtuel

sur IP 93

sur le nom 92virtuels 96

déboguer 95

SSL 144

Hotlinking 117

htaccess 98

htpasswd 106

HTTP 189

et WebDAV 154proxy transparent 201

restreindre les méthodes 118

httpd.pid 61

HTTPS130

Page 234: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 234/242

I    N D E  X 

221lsof 

I

Icône, créer 16

ImageMagick 185

Images

hotlinking 117

Importation

certificat 147

Include 11

Informations

sécurité 123

Installation 5

mod_dav 155, 156

sous UNIX et Linux 6, 7

sous Windows 8

Inverse, proxy 184, 188, 191

J

Jeux de caractères 80

Journal

access_log 46

analyser 53

archiver 55

entrées communes 60

erreurs 26, 40error_log 46

fichier 46

fusion 58

personnalisé 48

pour chaque hôte 59

quantité d'informations 27

rediriger 49

requête inhabituelle 61rotation 55

séparation 58

surveillance en temps réel 53

système 27

K

KeepAliveTimeout 179

kill 32

killall 32

L

LanguagePriority 80

Langueaffecter 80

par défaut 80

Liaison impossible 35

Liens symboliques 175

Ligne de commande

accès à DAV 162

cadaver 162

sitecopy 164tester 30

Limiter

proxy 127

refus de service 180

Limites

système d'exploitation 171,

172

Liste de contrôle de sécurité 123Listen 14, 141

Listing, désactiver 115

LoadModule 17, 20, 155

LogFormat 46

LogLevel 27

logresolve 57

lsof 31

Page 235: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 235/242

      I      N      D      E      X

222 Manipulation des en-têtes

M

Manipulation des en-têtes 196

Mappage URL 64, 81

Masquage des serveurs

d'arrière-guichet 192

Matériel, personnaliser 170

MaxRequestsPerChild 206

MaxSpareServers 206

Mécanisme d'acceptation 178

Mélange d'hôtes 94

Méthode HTTP, restriction 118

MIME 68

configurer 69

MinSpareServers 206

Mise en cache 185, 188

mod_actions 71

mod_apache_snmp 52

mod_auth 157

mod_auth_dbm 108

mod_authn_alias 122

mod_autoindex 116

mod_backhand 184

mod_bandwidth 181

mod_cache 185, 198

mod_cgi 72

mod_choke 182

mod_dav 153

installer 155, 156

mod_deflate 185, 212

mod_dir 81

mod_filter 210

mod_ftp 211

mod_include 74mod_log_spread 177

mod_logio 33

mod_loopback 33

mod_nocase 83

mod_perl 72

mod_proxy 197

mod_require_host 182

mod_rewrite 40, 81, 117, 167

mod_security 121

mod_snmp 52mod_speling 82, 83, 165

mod_ssl 131, 138, 140, 148

mod_status 51, 179

mod_tee 33

mod_throttle 182

mod_trace_output 33

mod_tsunami 182

mod_userdir 166mod_vhost_alias 97

mod_virtualhost_alias 96

Modification de site Web 152

Modules

activer 18

ajouter sans recompilation 19

Auth 145

authentification 120bandwidth_share 182

désactiver 18, 124

effacer la liste 18

hébergement virtuel 97

mod_actions 71

mod_apache_snmp 52

mod_auth 157

mod_auth_dbm 108mod_authn_alias 122

mod_autoindex 116

mod_backhand 184

mod_bandwidth 181

mod_cache 185, 198

mod_cgi 72

mod_choke 182

mod_dav 153mod_deflate 185, 212

mod_dir 81

mod_filter 210

mod_ftp 211

mod_include 74

mod_log_spread 177

mod_nocase 83

Page 236: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 236/242

I    N D E  X 

223Performances

mod_perl 72

mod_proxy 197

mod_require_host 182mod_rewrite 40, 81, 117, 167

mod_security 121

mod_snmp 52

mod_speling 82, 83, 165

mod_ssl 131, 138, 140, 148

mod_status 51, 179

mod_throttle 182

mod_tsunami 182mod_userdir 166

mod_vhost_alias 97

mod_virtualhost_alias 96

non compatible 35

rechercher 17

Robotcop 182, 183

Mot de passe

clé 134supprimer pour une clé 134

MPM 172, 203, 208

basé sur les processus 204

basé sur les threads 207

Event 208

Perchild 209

Prefork 205

sélectionner 204Worker 207

Multiview 78

N

NameVirtualHost 91

Navigateur, accès limité 119

Négociation

configurer 78

contenu 77, 177

netstat 31

noatime 175

Nom de serveur 16

O

Office, accès à DAV 158

openssl 132, 133, 135

Options 114

+ExecCGI 70

+Multiviews 78

noatime 175

Order 104, 120

Outils

apachetop 53

apxs 19

ImageMagick 185

logresolve 57

lsof 31

netstat 31

openssl 132

ps 31

rotatelogs 55

vérifier le fonctionnement 31

vlogger 59

vmstat 170

Ouverture avec erreur 36

P

Page

par utilisateur 166

rediriger 65, 66

valider 84

Paire de clés 133

Paramètres

HostnameLookups 178

PassEnv 75Perchild 209

Performances

améliorer 170, 193

CGI 72

RAM 170

SSL 143

système de fichiers 174

vitesse du disque 170

Page 237: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 237/242

      I      N      D      E      X

224 Personnalisation

Personnalisation

 journal 48

matériel 170refus d'accès 111

réseau 178

POP3 211

POP3Protocol On 212

Port 15

modifier 14

Pound 201

Préférences client 77Prefork 205

Problèmes de casse 83

Processus

externes

contrôler 173

MPM 204

Programme, exécution restreinte

114Protection de l'accès DAV 157

Protocole

CGI 69

DAV 153

HTTPS 130

Proxy

activer 189

de cache 197en-têtes 196

HTTP transparents 201

inverse 184, 188, 191

limiter 127

ordinaire 188, 190

activer 190

Pound 201

Squid 201URL 193

ProxyPass 191

ProxyPassReverse 192

ProxyRequests 190

ps 31

Publication

contenu 20, 151

R

RAM, augmenter 170

Redémarrage

automatique 57

du serveur 12

en douceur (graceful) 14

Redirect 65

Redirection

échec 67

erreur 40

expression régulière 66

 journal 49

page 65, 66

RedirectMatch 66

Refus

d'accès 37

personnaliser 111

de service 180

RemoveHandler 68

Répertoire

fichiers de configuration 98

listings 115

Répertoire utilisateur 167

RequestHeader 197

Requête

afficher le contenu 137

consignation conditionnelle 49

consigner 46

inhabituelle 61

signature 135

Require 105, 107

Réseau, personnaliser 178

Résolutionadresses IP 56

de nom 36

de problèmes avec

DAVLockDB 168

Ressources ( CGI exécutables) 70

Restriction

bande passante 181

connexions 181

Page 238: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 238/242

I    N D E  X 

225SSL

RLimitCPU 174

RLimitMem 174

RLimitNProc 174Robotcop 182, 183

Robots 183

robots.txt 60, 183

rotatelogs 55

Rotation des journaux 55

S

Satisfy 110

Satisfy all 110

Script 71

CGI 69

ScriptAlias 70

ScriptLog 72

Sections 21

conditionnelles 23

directives 22, 23

emplacement 120

répertoires 120

 VirtualHost 88, 89

Sécurisation

configuration de DAV 157

serveur 114

SSL 129

Sécurité

désactiver les modules 124

informations 123

liste de contrôle 123

Segmentation 38

Sélection du MPM 204

Séparation des journaux 58

ServerName 16, 89

ServerRoot 11

ServerTokens 116

Serveur

arrêt 12

arrêter 32

configuration minimale 140

connexion 41

démarrage 12

démarrage avec SSL 141en-tête 116

erreur interne 38

limiter l'accès 127

redémarrage 12

redémarrage automatique 57

restreindre l'envoi de

contenu 114

sécurité 114spécifier le nom 16

vérifier le fonctionnement 31

SetEnv 74

SetEnvIf 75

SetFilter 84

SetHandler 68

Signature

afficher le contenu de larequête 137

requête 135

Site, modifier 152

sitecopy 164

SNMP 52

Squid 201

SSI 73

configurer 74SSL 129

améliorer les performances 143

avertissement à l'accès 146

certificat 130

compiler 140

contourner les bogues 149

contrôle d'accès complexe 150

décharger 195desservir le contenu 144

et démarrage 141

fonctionnement 130

hôtes virtuels 96

hôtes virtuels sur le nom 144

tester les sites 148

Page 239: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 239/242

      I      N      D      E      X

226 SSLCryptoDevice

SSLCryptoDevice 144

SSLEngine 141

SSLPassPhraseDialog 142SSLRequire 150

SSLVerifyClient 147

StartServers 205

status 200

stunnel 148

Suppression

exemples de script 125

mot de passe d'une clé 134Surveillance

connexions 50

en temps réel 53

mod_status 51

SNMP 52

Symboliques, liens 175

SymLinksIfOwnerMatch 175

Syntaxe, erreur 34Système d'exploitation

augmenter les limites 171, 172

modifier les limites 172

Système de fichiers et

noatime 175

Système, journal 27

T

tail 54

Telnet, client 30

Test

à la ligne de commande 30

configuration 29

sites SSL 148

Threads MPM 207

Tidy (validation des pages) 84

TimeOut 181

Tomcat, connexion 200

traceroute (tracert) 42 

TransferLog 48

Typecorrespondances 79

MIME 68

U

ulimit 171

UnsetEnv 75

URL

auto-référentielle 16

en proxy 193

mappage 64, 81

User 15, 126

Utilisateur

autoriser 112

base de données 106

modifier 15

nombreux 108

page personnelle 166

répertoires 167

Utilitaires

htpasswd 106

kill 32

stunnel 148

tail 54

traceroute (tracert) 42

 V 

 Validation de pages 84

 Variables

d'environnement 74accès 75

paramétrer 75

d'environnement spéciales 76

 Versions 4

Page 240: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 240/242

I    N D E  X 

227Worker

 VirtualDocumentRootIP 97

 VirtualHost 88, 89

 VirtualScriptAliasIP 97 Virtuel

hébergement 87, 88

basé sur le nom 90

configurer 89, 91

modules 97

hôte 96

configurer 92, 93

déboguer 95vlogger 59

vmstat 170

 Vol de bande passante 117

W

WebDAV 152, 153

et HTTP 154

Windows, accès à DAV 159

Worker 207

Page 241: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 241/242

      I      N      D      E      X

228 Worker

Page 242: Apache - L'Essentiel Du Code Et Des Commandes

7/16/2019 Apache - L'Essentiel Du Code Et Des Commandes

http://slidepdf.com/reader/full/apache-lessentiel-du-code-et-des-commandes 242/242

ApacheLE GUIDE DE SURVIE

L’ESSENTIEL DU CODE ET DES COMMANDES