Vous êtes sur la page 1sur 242

Daniel Lopez

LE GUIDE DE SURVIE

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

Apache
LESSENTIEL DU CODE ET DES COMMANDES

Apache

Daniel Lopez Jesus Blanco

CampusPress a apport le plus grand soin la ralisation de ce livre an de vous fournir une information complte et able. Cependant, CampusPress nassume de responsabilits, ni pour son utilisation, ni pour les contrefaons de brevets ou atteintes aux droits de tierces personnes qui pourraient rsulter de cette utilisation. Les exemples ou les programmes prsents dans cet ouvrage sont fournis pour illustrer les descriptions thoriques. Ils ne sont en aucun cas destins une utilisation commerciale ou professionnelle. CampusPress ne pourra en aucun cas tre tenu pour responsable des prjudices ou dommages de quelque nature que ce soit pouvant rsulter de lutilisation de ces exemples ou programmes.

Tous les noms de produits ou autres marques cits dans ce livre sont des marques dposes par leurs propritaires respectifs.

Publi par CampusPress 47 bis, rue des Vinaigriers 75010 PARIS Tl : 01 72 74 90 00 Ralisation PAO : La B Auteur : Daniel Lopez et Jesus Blanco
ISBN : 978-2-7440-4001-6 Copyright 2009 CampusPress est une marque de Pearson Education France

Titre original : Apache Phrasebook Traduit de lamricain par : Nathalie Le Guillou de Penanros ISBN original : 0-672-32836-4 Copyright 2006 by Sams Publishing www.samspublishing.com Tous droits rservs Sams Publishing 800 East 96th, Indianapolis, Indiana 46240 USA

Tous droits rservs

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 reprsentation ou reproduction, mme partielle, autre que celles prvues larticle L. 122-5 2 et 3 a) du code de la proprit intellectuelle ne peut tre faite sans lautorisation expresse de Pearson Education France ou, le cas chant, sans le respect des modalits prvues larticle L. 122-10 dudit code.

Table des matires


Introduction 1 Les bases d'Apache Dcouverte d'Apache Pour savoir si Apache est dj install Installation d'Apache 1.3 sous Linux et UNIX Installation d'Apache 2.0 sous Linux et UNIX Installation d'Apache sous Windows Configuration de base des fichiers Utilisation de plusieurs fichiers de configuration Dmarrage, arrt et redmarrage d'Apache Modification de l'adresse et du port utiliss par Apache Modification de l'utilisateur Apache Spcification d'un nom de serveur Cration d'une icne pour "Ma page Web" Dcouverte des modules disponibles sur le serveur Activation et dsactivation de modules individuels Ajout de modules aprs la compilation d'Apache sans recompilation Publication de contenu 2 Dpannage A l'aide ! Mon serveur Apache ne fonctionne pas ! Le journal d'erreurs Connexion au dmon du journal systme Contrle de la quantit des informations consignes Test de la configuration Apache la recherche de problmes Test d'Apache partir de la ligne de commande 1 3 3 5 6 7 8 9 11 12 14 15 16 16 17 18 19 20 25 25 26 27 27 29 29

IV

APACHE

Vrification du fonctionnement d'Apache Autres manires d'arrter Apache Utilisation d'Apache pour dboguer Apache Erreurs de dmarrage Erreurs de refus d'accs Erreurs internes au serveur Autres fichiers pour la journalisation des erreurs Les redirections ne fonctionnent pas Liste de vrification pour le dpannage Si tout le reste a chou 3 Journaux et surveillance Introduction la consignation des erreurs dans Apache Fichiers journaux Apache par dfaut Cration des formats de journaux Cration d'un fichier journal personnalis Redirection des journaux vers un programme externe Consignation conditionnelle de requtes Surveillance des personnes se connectant votre site Surveillance d'Apache avec mod_status Surveillance d'Apache avec SNMP Analyse des journaux l'aide d'outils Open Source Surveillance de vos journaux en temps rel Consignation des requtes dans une base de donnes Rotation et archivage des journaux Contrle de la rsolution des adresses IP Traitement d'adresses IP consignes Redmarrage automatique d'Apache en cas de panne Fusion et sparation de fichiers journaux Conservation de fichiers spars pour chaque hte virtuel Entres de journaux communes

31 32 33 34 37 38 40 40 41 44 45 45 46 46 48 49 49 50 51 52 53 53 54 55 56 56 57 58 59 60

Table des matires

Mappage d'URL et contenu dynamique Mappage d'URL Mappage d'URL et de fichiers avec Alias Mappage de motifs d'URL des fichiers avec AliasMatch Redirection d'une page vers un autre emplacement Redirection vers la dernire version d'un fichier Echec de la redirection ou requtes non autorises Dfinition des gestionnaires de contenu Les types MIME Configuration des types MIME Les bases de l'excution des scripts CGI Dsignation de ressources comme des CGI excutables Association de scripts des mthodes HTTP et des types MIME Dpannage relatif l'excution des scripts CGI Amlioration des performances du script CGI SSI Configuration de SSI Paramtrage des variables d'environnement Paramtrage dynamique des variables d'environnement Variables d'environnement spciales Ngociation du contenu Configuration de la ngociation du contenu Affectation de jeux de caractres par dfaut et de priorits de langue Mappage avanc d'URL avec mod_rewrite Problme de l'oubli de la barre oblique finale Correction des fautes de frappe Rsolution des problmes de casse Validation de pages avec Tidy

63 63 64 64 65 66 67 67 68 69 69 70 71 72 72 73 74 74 75 76 77 78 80 81 81 82 83 84

VI

APACHE

Hbergement virtuel Dfinition de l'hbergement virtuel Hbergement virtuel bas sur IP Configuration de l'hbergement virtuel bas sur IP Hbergement virtuel bas sur le nom Configuration de l'hbergement virtuel bas sur le nom Que se passe-t-il si une requte ne correspond aucun hte virtuel ? Mlange d'htes bass sur IP et bass sur le nom Dbogage des configurations d'htes virtuels Utilisation de SSL avec des htes virtuels bass sur le nom

87 87 88 89 90 91 92 94 95 96 101 101 102 102 104 105 106 107 108 108 109 110 111 112 113 114 115

Scurit et contrle d'accs Le contrle d'accs, une exigence ? Diffrences existant entre les versions d'Apache L'authentification basique et digest Prsentation du contrle d'accs Apache Configuration des autorisations et des authentifications Apache Cration d'une base de donnes utilisateur Emploi de Require pour autoriser des utilisateurs et des groupes Gestion d'un grand nombre d'utilisateurs Autorisation d'accs des adresses IP spcifiques uniquement Refuser l'accs des adresses IP spcifiques Combinaison des mthodes de contrle d'accs Personnalisation de la page de refus d'accs Donner le pouvoir aux utilisateurs Refus d'accs aux fichiers systme et sensibles Restriction d'excution de programmes Eviter les abus

Table des matires

VII

Dsactivation des listings de rpertoire 115 Modification de l'en-tte Server: 116 Empcher le vol de vos images (hotlinking) 117 Restriction de mthodes HTTP spcifiques 118 Restriction d'accs base sur le type du navigateur 119 Utilisation des sections d'emplacement et de rpertoire 120 Autres modules d'authentification 120 Apache 2.2 122 Mise jour de la scurit Apache 123 Liste de contrle de scurit 123 Dsactiver les modules inutiles 124 Suppression des chantillons de script 125 Restreindre ou dsactiver l'excution de CGI et de SSI 125 Vrifier les autorisations de fichiers 126 Limiter ou dsactiver la fonctionnalit de proxy 127 Restreindre l'accs votre serveur par dfaut 127 7 SSL et TLS Dfinition de SSL Fonctionnement de SSL Compilation d'OpenSSL Cls de cryptage Cration d'une paire de cls Cration d'une paire de cls protges par mot de passe Suppression du mot de passe d'une cl Certificats Cration d'une requte de signature de certificat Affichage du contenu d'une requte de signature de certificat Cration d'un certificat autosign Compilation de la prise en charge SSL dans Apache 1.3 Compilation de la prise en charge SSL dans Apache 2.x 129 129 130 131 132 133 133 134 134 135 137 137 138 140

VIII

APACHE

Configuration minimale d'Apache Dmarrage d'Apache avec prise en charge SSL SSLPassPhraseDialog Amlioration des performances SSL Forcer le contenu tre desservi par SSL SSL et htes virtuels SSL bass sur le nom Utilisation des modules Auth d'Apache avec SSL Messages d'avertissement lors de l'accs un site Web activ par SSL Cration de certificats client Authentification l'aide des certificats client Alternatives mod_ssl Test de sites Web activs par SSL partir de la ligne de commande Contourner les implmentations SSL prsentant des bogues Contrle d'accs complexe avec mod_ssl Chapitres annexes 8 Publication de contenu avec DAV Apache et la publication de contenu Prsentation de WebDAV Avantages de l'utilisation de mod_dav WebDAV et le protocole HTTP Installation de mod_dav sous Apache 2.0 Installation de mod_dav sous Apache 1.3 Configuration WebDAV de base Scurisation de votre configuration WebDAV Accs aux ressources DAV depuis Microsoft Office Accs aux ressources DAV depuis Microsoft Windows Accs aux ressources DAV depuis Firefox Accs DAV depuis la ligne de commande

140 141 142 143 144 144 145 146 146 147 148 148 149 150 150 151 151 152 153 154 155 156 156 157 158 159 161 162

Table des matires

IX

Gestion des clients prsentant des bogues mod_speling et DAV Contenu dynamique et DAV Activation des pages par utilisateur Autres rpertoires utilisateur Rsolution des problmes avec DAVLockDB 9 Performances et volutivit Personnalisation d'Apache Les performances et l'volutivit Personnalisation du matriel Elargissement des limites du systme d'exploitation Elargissement des limites du systme d'exploitation sur les processus Augmentation des descripteurs de fichiers du systme d'exploitation Contrle des processus externes Amlioration des performances du systme de fichiers Gestion de liens symboliques Personnalisation du rseau et des paramtres de statut Eviter les abus Restriction des connexions et de la bande passante Gestion des robots Proxy inverses et systmes d'quilibrage des charges Mise en cache et compression Optimisations spcifiques aux modules Alternatives Apache 10 Proxy Apache et mise en cache De l'utilit de la mise en cache et des proxy Proxy ordinaires et inverses Diffrences entre Apache 1.3, 2.0 et 2.2

164 165 165 166 167 168 169 169 170 170 171 172 173 173 174 175 178 180 181 183 184 185 186 186 187 187 188 188

APACHE

Activation de la prise en charge de mod_proxy Activation de la prise en charge des proxy ordinaires Utilisation d'un proxy inverse pour unifier un espace URL Masquage des serveurs d'arrire-guichet Eviter l'inversion des URL en proxy Amlioration des performances Dchargement du processus SSL Transfert des informations de proxy dans les en-ttes Manipulation des en-ttes Implmentation d'un proxy de cache Mise en cache dans Apache 2 Equilibrage des charges Connexion Tomcat Autres proxy Proxy HTTP transparents 11 Multitraitement et modules de protocole Evolution de l'architecture Apache Slection d'un module multitraitement Dcouverte des MPM bass sur les processus Configuration de MPM Prefork MPM bass sur des threads et MPM hybrides Configuration de MPM Worker Autres MPM Description des filtres Apache 2 Utilisation d'Apache comme serveur FTP Utilisation d'Apache comme serveur POP3 Compression de contenu la vole Index

189 189 191 192 193 193 195 195 196 197 198 199 200 201 201 203 203 204 204 205 207 207 208 209 210 211 212 215

A propos des auteurs

XI

A propos des auteurs


Daniel Lopez est le fondateur de la socit BitRock qui labore des outils d'installation et de gestion multiplates-formes pour divers logiciels commerciaux et Open Source. Il y occupe actuellement le poste de directeur technique. Il a fait partie de la premire quipe d'ingnieurs de Covalent 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'intgration d'Apache et de .NET, ainsi que de Comanche, un outil de configuration de GUI pour Apache. Daniel Lopez intervient rgulirement dans des confrences sur l'Open Source, comme LinuxWorld, ApacheCon et la Convention Open Source O'Reilly. Il possde un master en tlcommunications de la Escuela Superior de Ingenieros de Sville et du Danmarks Tekniske Universitet. Il est d'autre part membre de l'Apache Software Foundation. Jesus Blanco est responsable de projets auprs de la socit BitRock, prcdemment cite. Il a travaill pour le Spanish Institute of Foreign Commerce, ce qui l'a conduit exercer ses talents au Brsil, 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 diplme d'administration des affaires (universit de Sville) et un master en informatique (UNED).

Introduction
Apache s'est toujours trouv au cur du Web, depuis ses
dbuts modestes o il n'tait qu'un fork, une "bifurcation" du serveur NCSA, jusqu' sa dernire version qui regorge de fonctions. Au fil du temps, ses capacits ont augment autant que sa complexit, tel point que son approche peut se rvler trs intimidante pour les novices. L'objectif de cet ouvrage est de vous aider naviguer parmi les centaines d'options du produit. Ce livre vous servira galement d'aide-mmoire pratique pour les tches les plus frquentes. De la mme faon qu'un guide linguistique se rvle un compagnon prcieux pour qui voyage l'tranger, 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 rponde vos besoins particuliers. Sachez toutefois que cet ouvrage ne couvre pas tous les aspects de ce trs vaste sujet.

1
Les bases d'Apache
Dcouverte d'Apache
Ce chapitre propose une introduction rapide au serveur Web Apache. Nous examinerons son architecture, ainsi que les diffrences qui existent entre ses principales versions (1.3 et 2.x). Nous expliquerons comment tlcharger et compiler Apache partir de la source ou l'aide de packages binaires et comment activer ou dsactiver 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 dmarrer, arrter, puis redmarrer Apache. Enfin, vous pourrez modifier la configuration minimale ncessaires pour faire fonctionner le serveur comme vous le souhaitez. Avec prs de 68 % de parts de march, selon Netcraft (http://www.netcraft.com), Apache est actuellement le serveur Web le plus populaire sur Internet. Voici ses principales caractristiques : b Portable. Apache s'excute sous Linux, Windows, Mac OS X, ainsi que d'autres systmes d'exploitation.

CHAPITRE 1 Les bases d'Apache

b Flexible. Son architecture tant modulaire et extensible, Apache peut tre configur de diverses manires. b Open Source. Vous pouvez tlcharger et utiliser Apache gratuitement. La disponibilit du code source vous permet d'en crer des versions personnalises. Il existe deux versions principales d'Apache, largement utilises aujourd'hui : la srie 1.3 et la srie 2.x. Apache 2.0 propose certaines amliorations et fonctionnalits qui faisaient dfaut la version 1.3 ; il est toutefois incompatible avec tous les modules crits pour cette prcdente mouture. En rgle gnrale, vous utiliserez Apache 2.x dans les cas suivants : b Vous disposez d'un systme d'exploitation Windows. b Vous devez desservir une grande quantit de contenu statique qui pourrait bnficier d'un module de traitement en threads sous UNIX. b Vous avez besoin de l'une de ses nouvelles fonctionnalits (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'excuter des modules internes ou tiers n'ayant pas t adapts Apache 2.x. b Vous devez excuter un logiciel, par exemple PHP, dont les extensions ne sont pas compatibles avec les threads ou processus lgers (bien qu'un mme code s'excutera probablement de faon satisfaisante sous Apache 2.0 avec le MPM Prefork). b Vous connaissez dj Apache 1.3 et n'avez pas de besoins spcifiques de mise niveau.

Pour savoir si Apache est dj install

Pour savoir si Apache est dj install


rpm q httpd rpm q apache rpm q apache2

Si vous utilisez un systme Linux, Apache est certainement dj install. Si votre distribution fait appel au systme de gestion de package rpm, tapez les commandes qui prcdent pour le vrifier. Il existe des commandes diffrentes, car les distributions n'adoptent pas toutes le mme nom de package. Avec la plupart des systmes de type UNIX, notamment Mac OS X, vous pouvez aussi vrifier directement que le binaire Apache est install, en recourant l'une des commandes suivantes :
httpd v /usr/sbin/httpd -v

Si la rponse est positive, le rsultat renvoy ressemblera ceci :


Server version: Apache/2.0.54 Server built: Apr 16 2005 14:25:31

Vous obtiendrez une rponse encore plus dtaille avec cette commande :
httpd -V

Sur les systmes Windows, pour savoir si Apache est install, accdez la partie Ajout/Suppression de programmes du Panneau de configuration. Le chemin d'installation est le suivant :
C:\Program Files\Apache Group

CHAPITRE 1 Les bases d'Apache

Pour se procurer Apache Par dfaut, Apache est prsent dans la plupart des versions de Linux et dans Mac OS X. Vous pouvez tlcharger les binaires et le source pour diverses plates-formes, notamment Windows, sur le site Web officiel d'Apache, l'adresse http://www.apachefrance.com.

Installation d'Apache 1.3 sous Linux et UNIX


tar xvfz apache_1.3.33.tar.gz cd apache_1.3.33 ./configure --prefix=/usr/local/apache --enable-shared=max make make install

Vous pouvez utiliser les outils de gestion de package de votre systme d'exploitation pour installer des versions pr-implantes du serveur. Cette solution est souvent prfrable, car elle s'intgre bien avec le systme de fichiers existant ou d'autres packages fournis par des tiers. Il est toutefois important de savoir construire sa propre version d'Apache partir du code source. Cela permet, par exemple, de crer un serveur personnalis selon les besoins ou bien d'appliquer rapidement des correctifs de scurit ds leur publication. La premire tape consiste vous rendre sur le site Web http://httpd.apache.org et tlcharger l'archive tar du source appropri. Dans cet ouvrage, lorsque nous ferons rfrence une fonctionnalit spcifique de la version 1.3, nous supposerons que vous avez install la version Apache 1.3.33. Il s'agit en fait de la version la plus rcente de la srie 1.3 l'heure o nous rdigeons ces lignes. L'archive tar du source s'intitule apache_1.3.33.tar.gz.

Installation d'Apache 2.0 sous Linux et UNIX

Vous pouvez maintenant dcompresser, configurer, compiler et installer Apache en appliquant les commandes du listing prcdent. L'option - -prefix indique le chemin sous lequel doit tre install le serveur. --enable-shared=max active la prise en charge du module chargeable, ncessaire pour prolonger ou personnaliser les fonctionnalits par la suite, sans avoir recompiler le serveur.
Info Certaines versions d'Apache se terminent par .tar.bz2. Cela signifie qu'elles ont t compresses l'aide de l'outil bzip2. Bien qu'il soit plus lent compresser et dcompresser, ce format permet de rduire la taille des fichiers de distribution ; il est dsormais frquemment utilis dans de nombreux projets Open Source. Pour dcompresser ce type de fichier, vous pouvez effectuer l'une des oprations suivantes sur la plupart des systmes Linux modernes : bunzip2 < apache_1.3.33.tar.bz2 | tar xvf -

tar xvfj apache_1.3.33.tar.bz2

Installation d'Apache 2.0 sous Linux et UNIX


tar xvfz apache_2.0.54.tar.gz cd apache_2.0.54 ./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=most make make install

Ce processus est analogue celui dcrit prcdemment pour la version 1.3, mme si les options d'activation de prise en charge des modules chargeables sont diffrentes.

CHAPITRE 1 Les bases d'Apache

Installation d'Apache sous Windows


L'installation d'Apache sous Windows est encore plus simple que sous UNIX. Le processus est quasiment identique pour Apache 1.3 et 2.x. Il vous suffit de tlcharger 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 rseau ; 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 accder votre serveur. L'adresse e-mail sera affiche dans les messages d'erreur, afin que vos visiteurs sachent qui contacter en cas de problme. Vous aurez galement la possibilit d'excuter Apache sous forme de service. Cette option est utile, par exemple si Apache doit s'excuter chaque dmarrage du serveur. Dans les autres cas, vous pourrez toujours relancer Apache partir de la ligne de commande.

Configuration de base des fichiers

Est-il possible d'installer diffrentes versions d'Apache sur la mme machine ? Oui, cela est tout fait possible, et les raisons de le faire sont nombreuses. Il suffit simplement de choisir des prfixes d'installation diffrents. Ainsi, par exemple, vous pouvez installer un serveur Apache 1.3 sous /usr/local/apache et une version 2.0 sous /usr/local/apache2. Pour excuter les serveurs simultanment, attribuez-leur des combinaisons d'adresses et de ports diffrentes. Souvenez-vous qu'il n'est pas obligatoire d'installer plusieurs serveurs Apache pour excuter plusieurs sites Web. Un seul serveur Apache peut suffire, grce la fonction d'hte virtuel (voir Chapitre 5). Il est galement possible de disposer de plusieurs serveurs, chacun desservant une partie spare d'un site Web. Vous pouvez, par exemple, amener un serveur Apache 2.0 fournir le contenu principal du site www.exemple.com et dlguer le contenu de www.exemple.com/connexion un serveur Apache 1.3 excutant une application mod_perl existante. Vous utiliserez alors un proxy inverse (voir Chapitre 10).

Conguration de base des chiers


Le Tableau 1.1 indique l'emplacement par dfaut du principal fichier de configuration Apache sous divers systmes d'exploitation. Puisque dans certains cas les versions 1.3 et 2 du serveur devront coexister cte cte, le nom du fichier peut diffrer pour chaque version.

10

CHAPITRE 1 Les bases d'Apache

Tableau 1.1. Emplacement du chier httpd.conf sur diffrents systmes Emplacement du fichier de configuration Plate-forme

/etc/httpd/httpd.conf Suse, Mandrake, anciens /etc/httpd/httpd2.conf systmes Red Hat, systmes /etc/httpd/conf/httpd.conf Newer Red, Fedora Core /etc/httpd/conf/httpd2.conf /usr/local/apache2/conf /usr/local/apache/conf Lors de la compilation partir du source, comme indiqu prcdemment dans ce chapitre. Windows

c:\Program Files\Apache Group\Apache2\conf\ httpd.conf c:\Program Files\Apache Group\Apache2\conf\ httpd.conf /private/etc/httpd/ httpd.conf

Mac OS X

Le principal fichier de configuration Apache est appel httpd.conf. Son emplacement varie selon que vous utilisiez Windows ou Linux d'une part, et selon que vous ayez compil Apache partir du code source ou utilis le binaire 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 sections. Pour y placer des commentaires, faites-les prcder

Utilisation de plusieurs fichiers de configuration

11

du signe dise (#) au dbut de la ligne (ils seront ignors par Apache). Sachez galement qu'une directive peut s'tendre sur plusieurs lignes condition de terminer la ligne prcdente par une barre oblique inverse (\). Les directives grent 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 rpertoire ou un emplacement particulier, aux requtes desservies par un hte virtuel particulier, etc. Lorsqu'un argument vers une directive correspond un chemin relatif, on suppose qu'il est relatif au chemin d'installation du serveur (racine du serveur). Ainsi, par exemple, si vous avez install Apache partir de la source (voir prcdemment), la racine du serveur est /usr/local/apache ou /usr/local/apache2. Vous pouvez modifier la valeur par dfaut avec la directive ServerRoot.

Utilisation de plusieurs chiers de conguration


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

Il est quelquefois utile de rpartir la configuration du serveur dans plusieurs fichiers. La directive Include permet d'inclure des fichiers individuels, tous les fichiers d'un rpertoire particulier ou les fichiers correspondant un certain motif (nous le voyons dans ces exemples). Si un chemin relatif est indiqu, il sera considr comme tant relatif au chemin spcifi par la directive ServerRoot.

12

CHAPITRE 1 Les bases d'Apache

Cela survient gnralement 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 rpertoire spcifique o Apache ira le chercher directement.

Dmarrage, arrt et redmarrage d'Apache


apachectl apachectl apachectl apachectl start stop restart graceful

Pour dmarrer, arrter ou redmarrer Apache, vous pouvez mettre n'importe laquelle de ces commandes. Selon votre installation, vous devrez peut-tre fournir un chemin absolu pour apachectl, comme /usr/sbin/apachectl ou /usr/local/apache/bin/apachectl. Mme s'il est possible de contrler 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 fonctionnalits communes dans un script simple utiliser. Sous UNIX, si Apache se connecte un port privilgi (ceux compris entre 1 et 1 024), vous aurez besoin de privilges racine pour dmarrer 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 arrter, puis redmarrer le serveur, envoyer un signal de redmarrage ou raliser un redmarrage "en douceur" (dit "graceful").

Dmarrage, arrt et redmarrage d'Apache

13

Apache relira alors sa configuration. Pour connatre la diffrence entre un redmarrage ordinaire et un redmarrage "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 dtail la section "Autres mthodes pour arrter Apache", au Chapitre 2. Sous Windows, vous pouvez informer Apache directement, l'aide de l'excutable apache.exe :
apache.exe -k restart apache.exe -k graceful apache.exe -k stop

Vous avez accs des raccourcis de ces commandes dans les entres du menu Start que cre le systme d'installation d'Apache. Si vous avez install Apache en tant que service, vous pouvez le dmarrer ou l'arrter l'aide des outils de gestion du service de Windows, comme suit : dans le Panneau de configuration, slectionnez Outils d'administration, puis cliquez sur l'icne Services. Apache 2.0 est en outre capable de placer un programme, Apache Monitor, dans la barre des tches. Il s'agit d'une simple interface graphique utilisateur pouvant servir dmarrer et arrter le serveur directement ou sous forme de service. Ce programme est install au dmarrage, mais vous pouvez aussi le lancer partir de l'entre Apache du menu Dmarrer.

14

CHAPITRE 1 Les bases d'Apache

Qu'est-ce qu'un redmarrage "en douceur" ? Un redmarrage "ordinaire" arrte le serveur Apache, puis le relance. En consquence, les requtes en cours sont abandonnes et aucune nouvelle requte n'est desservie tant que le serveur est l'arrt. Un redmarrage normal peut donc entraner une interruption momentane du service. Un redmarrage "en douceur" ("graceful") adopte une approche diffrente. Chaque thread (ou processus) desservant un client continue traiter la requte en cours. Une fois cela termin, il est arrt et remplac par un nouveau thread (ou processus) contenant la nouvelle configuration. Cela assure l'homognit de fonctionnement du serveur Web, sans qu'il y ait interruption. La manire la plus pratique de raliser un redmarrage "en douceur" sous UNIX consiste mettre la commande suivante :

# apachectl graceful
Sous Windows, utilisez :

Apache.exe k graceful

Modication de l'adresse et du port utiliss par Apache


Listen 192.168.200.4:80 Listen 8080

Apache doit connatre l'adresse IP et le port couter pour les requtes entrantes. Vous pouvez les prciser l'aide de la directive Listen. Celle-ci prend un port couter et, en option, une adresse IP. Si aucune adresse IP n'est spcifie, Apache coute toutes les adresses disponibles. Dans cet exemple, Apache coute les requtes 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 prciser diffrents ports et adresses IP couter.

Modification de l'utilisateur Apache

15

Vous pouvez galement utiliser la directive Port pour prciser le port qu'Apache doit couter, mais si une directive Listen est spcifie, Port n'aura aucun effet. Reportez-vous au Chapitre 4 pour en savoir plus sur la directive Port employe pour construire des URL autorfrentielles. La configuration est plus importante quand vous devez supporter des htes virtuels fonds sur des noms. Pour plus de dtail, voyez le Chapitre 5. Outre Listen, Apache 1.3 propose une directive annexe, appele BindAddress. Celle-ci tant devenue obsolte, nous dconseillons son emploi.

Modication de l'utilisateur Apache


User nobody Group nobody

Vous pouvez prciser le groupe et l'utilisateur sous lesquels s'excute Apache, grce aux directives User et Group. Pour des raisons de scurit, il est dconseill d'excuter n'importe quel serveur sous forme de racine, car un problme de configuration ou de programmation peut exposer la totalit du serveur. Quand Apache est excut sous forme de racine, il ralise toutes les actions ncessitant des privilges de superutilisateur (comme la liaison au port 80) et dessert les requtes relles que l'utilisateur et le groupe ont spcifies dans la configuration Apache. Les privilges et capacits de l'ID utilisateur sont gnralement rduits.

16

CHAPITRE 1 Les bases d'Apache

Spcication d'un nom de serveur


ServerName www.exemple.com

Dans certains cas, Apache doit construire des URL autorfrentielles. Il s'agit d'URL qui font rfrence au serveur lui-mme. Il est parfois ncessaire, par exemple, de rediriger une requte vers une autre page ou d'afficher l'adresse du site Web la fin d'une page d'erreur. Par dfaut, on utilise le domaine spcifi avec la directive ServerName. Reportez-vous au Chapitre 2 pour en savoir plus sur l'utilisation des directives UseCanonicalName et Port destines contrler ce comportement. Si aucun nom de serveur n'est spcifi, Apache tente d'en trouver un valide en ralisant une recherche DNS inverse sur l'adresse IP du serveur. Si le serveur DNS n'est pas correctement configur, l'opration peut tre longue ; l'auteur de la demande devra patienter un certain temps.

Cration d'une icne pour "Ma page Web"


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

De nombreux navigateurs rcents, notamment Internet Explorer, Mozilla et Konqueror vous permettent d'associer une icne un signet. Quand vous placez un signet sur une page, le navigateur demande un fichier favicon.ico vers le rpertoire contenant des documents porteurs de signets. Le fichier favicon.ico reprsente une icne au format Windows.

Dcouverte des modules disponibles sur le serveur

17

Vous pouvez utiliser la directive AliasMatch pour rediriger toutes les requtes de fichiers favicon.ico vers un seul emplacement contenant l'icne de votre site (nous le voyons dans cet exemple).

Dcouverte des modules disponibles sur le serveur


# httpd -l

Cette commande rpertorie les modules compils dans votre binaire de serveur ; elle doit renvoyer un rsultat 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 intgrs sous forme de bibliothques partages et placs par dfaut dans un rpertoire nomm modules/ (Apache 2.x) ou libexec/ (Apache 1.3). Pour voir les modules partags chargs dans le serveur au moment de l'excution, vous devrez tudier le fichier httpd.conf et rechercher les directives LoadModule appropries. Cela n'est pas ncessaire avec Apache 2.1/2.2, car httpd -M rpertorie tous les modules, y compris ceux chargs au moment de l'excution.

18

CHAPITRE 1 Les bases d'Apache

Activation et dsactivation de modules individuels


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

Vous pouvez activer ou dsactiver des modules individuels au moment de la compilation, l'aide des options --enable-module et --disable-module de la commande configure. L'exemple prcdent explique le fonctionnement 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 dsactiver un module en transformant simplement en commentaire la ligne qui charge 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 compils, l'aide d'une directive ClearModuleList. Vous devrez ensuite employer une directive AddModule pour chaque module utiliser. La fonctionnalit prvue par ClearModuleList n'est pas disponible dans Apache 2.x. Si vous dsactivez un module, n'oubliez pas de le supprimer des directives du fichier httpd.conf qu'il apporte ou de l'inclure dans une section <ifModule> (comme indiqu), faute de quoi le serveur risque de ne pas dmarrer :
<ifModule mod_status.c> ExtendedStatus On </ifModule>

Ajout de modules aprs la compilation d'Apache sans recompilation

19

Ajout de modules aprs la compilation d'Apache sans recompilation


# apxs cia mod_usertrack.c

Eh oui, vous pouvez ajouter des modules Apache sans recompiler, mais uniquement si mod_so est dj compil dans votre serveur. Pour savoir si c'est le cas, consultez la section "Dcouverte 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 dfaut dans Apache. Pour compiler et installer un module avec apxs, il suffit de passer du rpertoire 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 rpertoire des modules Apache et modifier le fichier de configuration. apxs peut grer tout cela automatiquement, grce 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 modules tiers plus complexes, comme PHP, il existe gnralement des commutateurs --with-apxs ou --with-apxs2 transfrer dans le script de configuration. Si vous possdez une version binaire du module disponible, inutile d'entreprendre ces tapes lies apxs. Cela vaut en particulier si vous avez dj compil de nombreux

20

CHAPITRE 1 Les bases d'Apache

modules optionnels lors de la construction du serveur ou si le module est dj fourni dans le cadre de votre distribution Linux ou de votre package d'installation Windows. Si vous utilisez Apache 1.3, vous pouvez ajouter le nouveau 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 LoadModule, ici avec modules/ au lieu de libexec/, dans le rpertoire dans lequel sont installs par dfaut les modules chargeables.

Publication de contenu
DocumentRoot /usr/local/apache/htdocs

Par dfaut, Apache dessert un contenu partir du rpertoire htdocs/ (qui, historiquement, signifie "document html") dans le rpertoire d'installation. Vous pouvez y placer des documents qui apparatront automatiquement dans l'espace URL du document. Ainsi, par exemple, si vous crez un rpertoire, dans htdocs, nomm foo, et que vous y placez le fichier bar.html, celui-ci sera accessible de l'extrieur par l'adresse suivante :
http://www.exemple.com/foo/bar.html

Vous pouvez modifier l'emplacement du rpertoire de documents l'aide d'une directive DocumentRoot, comme indiqu. Si un chemin relatif est prcis, il sera considr comme tant relatif au chemin spcifi par la directive ServerRoot.

Publication de contenu

21

Il n'est pas obligatoire de placer le contenu dans le rpertoire racine des documents. Apache propose en effet plusieurs mcanismes puissants et flexibles pour faire correspondre les URL demandes par les clients avec des fichiers prsents sur des disques ou des ressources fournies par des modules. Pour plus de dtails, consultez le Chapitre 4.

Sections
Les sections, sortes de conteneurs de directives, limitent la porte d'application des directives. Si les directives ne se trouvent pas dans une section, cela signie qu'elles concernent l'ensemble du serveur par dfaut (conguration du serveur) et s'y appliquent :
<Directory "/usr/local/apache/htdocs"> ... </Directory> <Location "/downloads/*.html"> ... </Location> <FilesMatch "\.(gif|jpg)"> ... </FilesMatch>

22

CHAPITRE 1 Les bases d'Apache

Sections de directives Apache par dfaut


Les sections de directives suivantes correspondent aux sections par dfaut utilises dans les chiers de conguration Apache :
<VirtualHost>. Directive qui spcie un serveur vir-

tuel. Sachez qu'il est possible d'hberger diffrents sites Web l'aide d'une seule installation Apache (voir Chapitre 5).
<Directory> et <DirectoryMatch>. Ces sections appliquent des directives un rpertoire (ou groupe de rpertoires) donn dans le systme de chiers. La section <DirectoryMatch> permet d'utiliser des motifs d'expressions rgulires comme arguments. <Location> et <LocationMatch>. Appliquent des directives certaines URL ou certains motifs d'URL demands. Elles sont semblables aux sections Directory. <Files> et <FilesMatch>. Identiques aux conteneurs Directory et Location, les sections Files appliquent des

directives certains chiers ou motifs de chiers. Ces sections ne sont pas les seules disponibles. Des modules, comme mod_proxy, peuvent fournir leurs propres sections (voir Chapitre 10). Consultez galement le Chapitre 8 pour en savoir plus sur les sections qui restreignent l'accs en fonction des mthodes http.
Info Les sections Directory, Files et Location peuvent aussi prendre des expressions rgulires comme arguments condition de les faire prcder d'un signe ~. Les expressions rgulires sont des chanes qui dcrivent un jeu de chanes ou y correspondent, en fonction de certaines rgles de syntaxe.

Sections de directives Apache


Sections de directives Apache

23

Ainsi, par exemple, l'expression rgulire <Files ~ "\.(gif|jpg)"> concordera avec toutes les requtes demandant un fichier image dont l'extension est .jpg ou .gif. Toutefois, il vaut mieux les remplacer par les directives DirectoryMatch, LocationMatch et FilesMatch pour des raisons de clart. Vous en saurez plus sur les expressions rgulires en vous rendant l'adresse http://fr.wikipedia.org/wiki/ Expression_r%C3%A9guli%C3%A8re.

Sections de directives pour l'valuation conditionnelle


Apache assure la prise en charge de sections conditionnelles. Les directives qui y gurent seront traites uniquement si certaines conditions sont remplies : <IfDefine>. Les directives de cette section seront traites si un argument de ligne de commande spcique est transfr l'excutable Apache. Dans l'exemple suivant, le paramtre 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 transfr. <IfModule>. Les directives d'une section IfModule ne seront traites que si le module transfr comme argument est prsent dans le serveur Web. Le chier de conguration Apache par dfaut comprend des exemples de ce type pour diffrents modules MPM. Par exemple, dans le chier 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

2
Dpannage
e chapitre traite des problmes les plus communs rencontrs lors de l'excution d'Apache, par exemple au cours des procdures d'autorisation de fichiers ou lorsqu'il est impossible d'effectuer une liaison avec un port donn. Nous expliquerons comment les rsoudre. Nous explorerons d'ailleurs plusieurs outils et ressources disponibles pour isoler la cause de la plupart des problmes.

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


Quoi de plus frustrant que de ne pas pouvoir avancer sur un ouvrage technique cause d'un logiciel dficient ? Il n'est pas question que ce soit le cas pour ce livre, bien sr. C'est pourquoi nous avons plac ce chapitre vers le dbut de l'ouvrage. Il couvre la fois des sujets de base et des sujets avancs. N'hsitez donc pas sauter ce qui ne vous concerne pas si vous venez tout juste de dcouvrir Apache !

26

CHAPITRE 2 Dpannage

Le journal d'erreurs
ErrorLog logs/error_log

Le journal d'erreurs assure le suivi des vnements importants survenant dans la vie du serveur, comme les dmarrages, redmarrages, avertissements ou erreurs lis son fonctionnement, ainsi que les requtes interdites ou non valides. C'est le premier endroit o chercher pour rsoudre un problme li au serveur. Sur les systmes UNIX, le fichier error_log est plac par dfaut dans le rpertoire logs/ de votre installation Apache. Si vous utilisez une installation Apache livre avec votre distribution, ce fichier peut se trouver ailleurs, le plus souvent sous /var/log/httpd. Sous Windows, le fichier est intitul error.log et se situe galement sous le rpertoire logs. Vous utiliserez la directive ErrorLog pour prciser le chemin du fichier journal d'erreurs. Prfixez-le avec un tiret, afin de consigner les erreurs sur l'entre standard d'un autre programme. Cette technique est dcrite plus en dtail au Chapitre 3. Sachez que le fichier d'erreurs ne sera cr qu'une fois qu'Apache aura t dmarr pour la premire fois.

Connexion au dmon du journal systme

27

Connexion au dmon du journal systme


ErrorLog syslog ErrorLog syslog:local7

Sous UNIX, passez l'argument syslog ErrorLog, de sorte qu'Apache utilise le dmon du journal systme, afin de consigner les erreurs Apache (comme le montre l'exemple). Vous pouvez, en option, y joindre une facilit (par dfaut local7), comme indiqu. Une facilit syslog est un champ d'informations associ un message syslog qui indique la source du message de journal. Les facilits local0 local10 sont rserves aux administrateurs et aux applications comme Apache.

Contrle de la quantit des informations consignes


LogLevel notice

Les informations d'erreur fournies par Apache peuvent tre classes en fonction de leur degr d'importance. La directive LogLevel, avec l'un des arguments prsents au Tableau 2.1, permet de choisir les messages recevoir. Seules les erreurs de ce niveau d'importance (ou suprieur) seront consignes. Le niveau d'erreur par dfaut, "warn" (avertir), convient pour la plupart des installations Apache. En revanche, si vous tentez de dpanner une configuration spcifique, vous pouvez abaisser le niveau jusqu' "debug" (dboguer) pour obtenir des informations de consignation plus dtailles.

28

CHAPITRE 2 Dpannage

Tableau 2.1 Options LogLevel telles que dcrites dans la documentation Apache
Paramtre Description Exemple

emerg

Situation d'urgence, Child cannot open lock file. le systme est Exiting. inutilisable. Une action doit tre entreprise immdiatement. getpwuid: couldn't determine user name from uid.

alert

crit

Conditions critiques. socket: Failed to get a socket, exiting child. Situation d'erreur. Situation d'avertissement. Situation normale, mais mritant d'tre signale. Informatif. Server seems busy, (You may need to increase StarServers, or Min/MaxSpareServers)... Opening config file... Premature end of script headers. Child process 1234 did not exit, sending another SIGHUP.

error

warn

notice

info

debug

Messages de dbogage.

Test de la configuration Apache la recherche de problmes

29

Test de la conguration Apache la recherche de problmes


# apachectl configtest

Cette commande sert tester le fichier de configuration Apache, la recherche de problmes communs, avant de l'utiliser sur un serveur en situation relle. Apache procde de la mme manire pour tester votre configuration chaque fois que vous mettez une commande de redmarrage, l'aide d'apachectl. Vous tes certain, de cette manire, qu'un serveur en tat de marche pourra redmarrer grce ce nouveau fichier de configuration.

Test d'Apache partir de la ligne de commande


$ telnet www.apache.org 80 Trying 192.87.106.226... Connected to ajax-1.apache.org (192.87.106.226). Escape character is '^]'. HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Sun, 04 Sep 2005 20:42:02 GMT Server: Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7a DAV/2 SVN/1.2.0-dev Last-Modified: Sat, 03 Sep 2005 11:35:42 GMT ETag: "203a8-2de2-3ffdc7a6d3f80" Accept-Ranges: bytes Content-Length: 11746 Cache-Control: max-age=86400 Expires: Mon, 05 Sep 2005 20:42:02 GMT Connection: close Content-Type: text/html; charset=ISO-8859-1 Connection closed by foreign host.

30

CHAPITRE 2 Dpannage

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 prsence d'un serveur Apache actif partir de la ligne de commande. Si vous ne recevez pas de rponse une requte Telnet distante alors que votre rseau est correctement configur, cela signifie qu'Apache n'coute pas sur l'adresse et le port en question. Cela peut tre utile pour dpanner un environnement dans lequel il n'existe pas de navigateur Web, comme le cas peut se prsenter lorsque vous accdez un serveur distance sur SSH. Ainsi, si vous pouvez accder Apache sur une machine distante partir de l'adresse localhost en utilisant Telnet, mais que vous n'utilisez pas de navigateur distance, le problme peut provenir d'un pare-feu ou d'un paramtre incorrect de la directive Listen d'Apache. Connectez-vous, via Telnet, l'adresse www.apache.org (ou votre site prfr) sur le port 80, puis tapez :
HEAD / HTTP/1.0

ou
GET / HTTP/1.0

Appuyez deux fois sur la touche Entre. Vous devriez recevoir une rponse semblable celle de l'exemple. Si un navigateur de ligne de commande Lynx est install sur votre systme UNIX, vous pouvez obtenir un rsultat analogue en mettant la commande :
lynx head dump http://www.apache.org

Le Chapitre 7 traite de mod_ssl et donne une autre mthode pour se connecter un serveur Web activ par SSL l'aide de l'outil de ligne de commande openssl.

Vrification du fonctionnement d'Apache

31

Vrication du fonctionnement d'Apache


ps aux | grep httpd 25297 ? S 0:00 /usr/local/www/bin/ httpd -k start 15874 ? S 0:06 /usr/local/www/bin /httpd -k start 14441 ? S 0:02 /usr/local/www/bin /httpd -k start ... /usr/sbin/lsof | grep httpd |grep IPv httpd 14441 nobody 3u IPv4 136524 TCP www.exemple.com:http (LISTEN) httpd 25297 root 3u IPv4 136524 TCP www.exemple.com:http (LISTEN) httpd 30277 nobody 3u IPv4 136524 TCP www.exemple.com:http (LISTEN) ... netstat -ltnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.1.151:80 0.0.0.0: * LISTEN 25297/httpd tcp 0 0 0.0.0.0:22 0.0.0.0: * LISTEN 1038/sshd

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 problme est survenu sur le rseau. Les systmes UNIX proposent plusieurs outils de ligne de commande pour vous aider ; l'exemple en montre quelques-uns. L'outil ps indique si le processus httpd fonctionne ou non sur le systme. Les outils netstat et lsof dsignent le port et l'adresse sur lesquels le serveur Apache coute.

32

CHAPITRE 2 Dpannage

Sous Windows, vous pouvez faire appel au Gestionnaire des tches (raccourci clavier : Ctrl+Alt+Suppr) pour vrifier que le processus Apache.exe fonctionne. Vous pouvez galement utiliser l'application de la barre des tches figurant dans la plupart des versions rcentes pour connatre la situation d'Apache.

Autres manires d'arrter Apache


# kill HUP 25297 # kill 9 25297

Il peut quelquefois tre ncessaire ou pratique d'arrter le serveur directement l'aide de l'utilitaire de ligne de commande 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 spcifiant 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 arrter le serveur et SIGHUP pour le redmarrer. Vous pouvez galement remplacer le signal par son quivalent numrique, 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 processus nomms httpd, avec la commande killall. Vous pouvez, par exemple, arrter tous les processus httpd en utilisant ceci :
# killall HUP httpd

Soyez attentif toutefois : si vous excutez plusieurs instances d'Apache, cette commande les arrtera toutes.

Utilisation d'Apache pour dboguer Apache

33

N'oubliez pas qu'il vous faut disposer des autorisations appropries pour que ces commandes fonctionnent. Dans presque tous les cas, vous devez tre superutilisateur ou propritaire du processus Apache pour tre autoris y mettre fin et le redmarrer. Sous Windows, vous pouvez forcer l'arrt d'Apache en cliquant sur le bouton Fin de tche du Gestionnaire des tches.

Utilisation d'Apache pour dboguer Apache


Plusieurs modules Apache peuvent vous aider dpanner ou dboguer une configuration Apache ou une application Web.
mod_loopback est un outil de dbogage de clients Web. Il

renvoie simplement en cho au navigateur tout ce qu'il a reu concernant une requte HTTP, notamment des donnes 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 toutes les donnes reues ou renvoyes par le serveur vers un journal d'erreurs des fins de dbogage.

Tous ces modules affectent les performances mais peuvent se rvler trs utiles pour le dbogage, par exemple lorsque des problmes d'en-tte ou de cookies surviennent.

34

CHAPITRE 2 Dpannage

Erreurs de dmarrage
De nombreuses causes peuvent empcher Apache de dmarrer. Dans cette section, nous examinons certains des problmes qui peuvent survenir et les erreurs que vous recevez pour chacun d'entre eux.

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

La commande "PiidFile" n'est pas valide. Elle est peut-tre mal orthographie ou bien dfinie 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 le fichier de configuration, soit que vous avez fait figurer une ou plusieurs directives utilises par un module qui n'a pas t ajout au serveur. Vrifiez la syntaxe du fichier de configuration, indique dans le message d'erreur. Reportez-vous au Chapitre 1 pour en savoir plus sur l'utilisation d'une directive <ifModule>, afin d'exclure des directives de manire conditionnelle. Ainsi, le fichier de configuration pourra tre trait, mme si un module n'est pas disponible.

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

Une erreur d'adresse dj utilise ("address already in use") indique qu'un autre programme emploie le port auquel Apache tente de se connecter. Pour rsoudre le problme, vous devez soit stopper le programme qui utilise ce port avant de dmarrer Apache soit modifier, dans le fichier de configuration httpd.conf, le port sur lequel

Erreurs de dmarrage

35

Apache coute les requtes, en ajustant les valeurs donnes aprs les directives Listen et Port. Dans la plupart des cas, ce type d'erreur survient quand un autre serveur Apache fonctionne dj sur votre systme. Dans le cas de Windows, cela peut signifier qu'une instance d'Internet Information Server ou de Microsoft Personal Web Server s'excute sur le port sur lequel Apache est configur. D'autres programmes populaires, comme Skype, sont aussi connus pour utiliser le port 80 certaines occasions.

Impossible de se connecter au port


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

Ce type d'erreur indique que vous ne disposez pas des autorisations ncessaires pour qu'Apache se connecte au port spcifi 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 rsoudre ce problme, connectez-vous en tant que racine et mettez la commande su. Ensuite, tentez nouveau de dmarrer le serveur. Si vous ne disposez pas d'un accs racine, faites passer, dans votre fichier httpd.conf, le port utilis par Apache sur un nombre suprieur 1 024.

Module non compatible


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

Une erreur de module non compatible ("module is not compatible") survient quand Apache tente de charger un module qui a t compil pour un serveur plus rcent (ou plus ancien) que celui actuellement install. Si vous disposez

36

CHAPITRE 2 Dpannage

du source du module, vous pourrez peut-tre le recompiler l'aide de votre installation Apache actuelle (voir Chapitre 1). Si vous ne disposez pas du source ou que vous soyez incapable de recompiler un module dont la fonctionnalit est essentielle pour vous, mettez niveau (ou rtrogradez) votre serveur Apache avec une version compatible avec le module.

Rsolution de nom
"Cannot determine hostname"

Plusieurs directives Apache, notamment ServerName et Listen, acceptent des noms d'htes comme arguments. Toutefois, si Apache n'est pas capable de rsoudre un nom d'hte fourni sur une adresse IP au dmarrage l'aide du DNS (service de nom de domaine) de la liste d'htes de votre systme, une erreur s'affiche, signalant l'impossibilit de dterminer le nom d'hte. Pour rsoudre ce problme, vrifiez votre DNS et les paramtres /etc/hosts, ainsi que l'orthographe des noms d'htes fournis dans httpd.conf. Chaque fois que cela est possible, utilisez les adresses IP au lieu des noms d'htes pour des directives comme Listen et <VirtualHost>.

Impossible d'ouvrir un journal ou un chier de conguration


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

Ce type d'erreur signale que vous ne disposez pas des autorisations suffisantes pour lire le ou les fichiers de configuration Apache ou pour crire dans les fichiers de journal Apache.

Erreurs de refus d'accs

37

Ce problme survient souvent quand Apache est lanc par un utilisateur autre que celui qui l'a construit et install. Dans ce cas, dmarrez Apache sous l'identit du superutilisateur (ou de l'utilisateur) qui l'a install ou, si vous disposez des autorisations, employez chmod pour modifier la proprit du fichier nomm dans le message d'erreur.

Erreurs de refus d'accs


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

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 que l'URL demande est soumise des restrictions d'accs auxquelles vous ne satisfaites pas. Pour rsoudre ce problme, modifiez les autorisations du contenu Web ou des fichiers que vous avez demands. Ensuite, vrifiez que tous les rpertoires menant au document en question sont accessibles la fois en lecture et en excution pour le propritaire du processus Apache. Sous UNIX, vous pouvez employer l'utilitaire chmod pour dfinir ces autorisations. Le message "Client denied by server configuration" (Client refus par la configuration du serveur) peut apparatre dans le journal des erreurs. Cela signifie que le refus provient des directives de contrle d'accs comme Allow (Autoriser) et Deny (Refuser) dans les sections <Directory> ou <Location> de cette URL, figurant dans les fichiers de configuration Apache. Une dclaration "Directory index forbidden by rule" (Index de rpertoire interdit par la rgle) dans le journal des erreurs signale que vous avez tent de consulter un rpertoire dans lequel ne se trouvait aucun fichier d'index.

38

CHAPITRE 2 Dpannage

Pour en savoir plus sur l'indexation des rpertoires 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'excuter un script CGI, le message "Options ExecCGI is off in this directory" (Options ExecCGI dsactives dans ce rpertoire) peut s'afficher. Cela signifie que le CGI n'est pas signal comme excutable dans le fichier de configuration Apache ou que les scripts CGI ne peuvent pas tre excuts partir du rpertoire en question. Renseignez-vous sur les directives ScriptAlias ou Options pour en savoir plus.

Erreurs internes au serveur


Les erreurs internes au serveur sont celles qui empchent Apache de rpondre une requte.

Erreurs de segmentation
"child pid xxx exit signal Segmentation Fault (11)"

Une erreur de segmentation peut survenir dans les cas suivants : le serveur Apache tente d'accder des zones de mmoire appartenant d'autres processus systme, ou bien le systme rencontre une instruction malforme ou interdite dans le processus Apache. La situation est due soit un bogue (gnralement prsent dans des bibliothques ou des modules exprimentaux mal crits), soit une panne matrielle (habituellement dans la mmoire, le chipset, le bus ou le processeur).

Erreurs internes au serveur

39

Fin prmature des en-ttes de script


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

Une erreur "Premature end of script headers" (Fin prmature d'en-tte de script) est due l'excution incomplte d'un script CGI. En effet, il faut que le programme CGI dispose des autorisations d'excution et que l'interprteur de la premire ligne du script pointe vers le bon programme. Cette erreur peut apparatre, par exemple, si votre script affiche #!/usr/local/bin/perl sur sa premire ligne alors que l'interprteur Perl est situ /usr/bin/perl. Ces erreurs sont gnralement dues un arrt anormal du programme, avant mme que le script n'ait renvoy des donnes. Les pannes peuvent galement relever d'autres lments, notamment des erreurs dans le code ou l'absence de certaines bibliothques auxquelles le programme est li. Parfois, le systme d'exploitation ou Apache peuvent terminer le processus s'il consomme trop de ressources (mmoire, temps d'unit centrale), comme nous le verrons au Chapitre 9.

En-ttes "mal forms"


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

Une erreur "en-tte mal form" apparat dans un script lorsque les en-ttes n'ont pas le format appropri (gnralement du fait d'une erreur de programmation). Le serveur Apache attend une rponse de script commenant par zro, ou plusieurs en-ttes, suivis d'une ligne vide.

40

CHAPITRE 2 Dpannage

Autres chiers pour la journalisation des erreurs


RewriteLog /usr/local/apache/logs/rewrite_log RewriteLogLevel warn SSLLog /usr/local/apache/logs/ssl_log SSLLogLevel warn ScriptLog logs/cgi_log

Plusieurs modules, notamment le module Apache 1.3 SSL, mod_rewrite et mod_cgifournissent leurs propres directives pour consigner des donnes spcifiques au module dans un fichier spar.

Les redirections ne fonctionnent pas


UseCanonicalName off

Si votre serveur Apache devient inaccessible ds que le serveur met une redirection, cela peut tre d au fait que le nom canonique de votre hte est inaccessible depuis l'extrieur de votre rseau, ou est incorrect. Par exemple, un ServerName rgl sur localhost, 127.0.0.1, ou sur une adresse prive, sera inaccessible si le serveur redirige l'utilisateur vers une URL fonde sur ces valeurs. Pour rsoudre ce problme, fournissez un ServerName valide, ou rglez UseCanonicalName sur "off", de sorte que les URL autorfrentielles se construisent avec le nom d'hte fourni par le client. Ce problme survient frquemment sur les machines se trouvant derrire un proxy inverse (voir Chapitre 10).

Liste de vrification pour le dpannage

41

Liste de vrication pour le dpannage


Cette section rsume certains des problmes les plus frquents survenant lors du dpannage d'Apache.

Dmarrage du serveur
Si vous ne parvenez pas dmarrer le serveur, consultez le journal des erreurs pour obtenir des informations sur les causes de la panne. Si un autre serveur fonctionne dj cette adresse, optez pour une combinaison port/adresse diffrente. Si vous ne disposez pas des autorisations ncessaires pour vous connecter au port demand, lancez Apache en tant que superutilisateur (racine), de sorte accder aux ports privilgis. Si Apache ne parvient pas ouvrir les fichiers de configuration ou de journal, vrifiez qu'ils appartiennent bien l'utilisateur qui a install Apache et que celui-ci possde l'autorisation d'y crire.

Connexion au serveur
Si vous tentez d'accder une page du serveur et qu'elle ne s'affiche pas, vous devez d'abord dterminer si l'erreur provient du serveur, du rseau ou du navigateur. Vrifiez qu'Apache s'excute l'aide de ps, netstat ou du Gestionnaire de tches (sous Windows). Il est aussi possible que le serveur ne s'excute pas du tout. Vrifiez ensuite que vous pouvez vous connecter Apache partir de la machine locale. Pour cela, utilisez Telnet pour vous connecter directement au serveur et mettre une requte test. Vrifiez ensuite qu'Apache fonctionne

42

CHAPITRE 2 Dpannage

sur la combinaison adresse/port correcte. Si vous pouvez accder 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 netstat ou lsof pour dterminer les adresses sur lesquelles Apache coute et vous assurer qu'elles sont correctes. Vrifiez que votre pare-feu ou votre routeur sont correctement configurs. Si Apache coute sur l'adresse correcte mais qu'il soit inaccessible en dehors de votre rseau, il est possible que le trafic rseau vers votre serveur Apache soit bloqu. Servez-vous de l'utilitaire traceroute (tracert sous Windows) pour tester la connectivit du rseau entre les htes en question. De nombreux systmes d'exploitation empchent par dfaut l'accs depuis l'extrieur, except sur certains ports slectionns. Si vous excutez Apache sur un port non standard, il y a des chances que vous vous retrouviez bloqu. La rsolution de ce problme varie selon les distributions. Vous pouvez, par exemple, utiliser l'outil system-config-securitylevel sur les systmes Fedora, et l'outil Windows Firewall dans le Panneau de configuration Windows. Enfin, si vous utilisez Secure Sockets Layer (SSL) pour accder au serveur (voir Chapitre 7) et que vous vous connectez l'aide de versions plus anciennes du navigateur ou que vous excutez des configurations inhabituelles, consultez le journal d'erreurs la recherche de problmes lis au cryptage de donnes SSL.

Documents introuvables
Si vous parvenez accder au serveur mais que vous obtenez une erreur de type "Document Not Found" (Document introuvable), vrifiez que le document existe bien dans le systme de fichiers.

Liste de vrification pour le dpannage

43

Vrifiez ensuite que la requte a atteint le serveur, en consultant le fichier access_log. Si plusieurs instances d'Apache s'excutent simultanment, prenez garde ne pas vous connecter au mauvais serveur. Vrifiez 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 rpertoire cible. Enfin, partez la recherche des redirections incorrectes. Vrifiez notamment que les barres obliques de fin sont bien prsentes et testez les problmes lis ServerName dcrits plus tt dans ce chapitre.

Accs interdit
Si un document existe bel et bien mais que son accs vous est refus ("Access Forbidden"), vrifiez quelques points de base. Assurez-vous que le propritaire du processus Apache dispose de l'autorisation de lire le fichier. Vrifiez que le propritaire du processus Apache possde des autorisations de lecture et d'numration pour tous les rpertoires figurant sur le chemin menant au fichier. Vrifiez que vous ne tentez pas d'accder un rpertoire ne contenant pas de fichier d'index alors que les listings de rpertoire sont interdits dans le fichier de configuration Apache. Vrifiez que la requte rpond toutes les exigences stipules par les directives de contrle d'accs du fichier de configuration Apache. Si vous tentez d'accder un script CGI, vrifiez qu'il a reu des autorisations en lecture et en excution.

44

CHAPITRE 2 Dpannage

Erreurs internes au serveur


Si vous obtenez une "Internal Server Error" (Erreur interne au 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'accder un programme CGI ? Possde-t-il les autorisations de lecture et d'excution appropries ? Le chemin vers l'interprteur la premire ligne du script est-il correct ? L'interprteur est-il dsign comme tant un script CGI par une directive ScriptAlias ou une directive de mme type ?

Si tout le reste a chou


Vous avez dcouvert dans ce chapitre les problmes les plus communs rencontrs par les utilisateurs d'Apache. Si toutefois une erreur non rpertorie ici survient, la premire chose faire est de vrifier les journaux d'erreurs. Si ncessaire, augmentez le LogLevel du serveur Apache pour trouver des indices sur la nature du problme. Consultez la documentation Apache, les listes de diffusion et la base de donnes 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 "rglement" qui stipule que vous devez d'abord essayer de trouver vous-mme une solution, puis regrouper suffisamment d'informations pour que les autres puissent vous aider !

3
Journaux et surveillance
Introduction la consignation des erreurs dans Apache
Outre la fonction de consignation des erreurs dcrite au Chapitre 2, Apache propose diverses possibilits pour enregistrer des informations concernant tous les aspects d'une requte. Ce chapitre dcrit les problmes les plus frquents survenant lors de la consignation des requtes : consignation conditionnelle, rotation des journaux, rsolution des adresses IP et consignation de type "pipe". Il traite galement de plusieurs modules et utilitaires intgrs et tiers, destins surveiller la situation de votre serveur Apache et analyser ses journaux.

46

CHAPITRE 3 Journaux et surveillance

Fichiers journaux Apache par dfaut


Apache propose plusieurs fonctions de surveillance et de consignation qui permettent de s'assurer du bon fonctionnement du serveur. La configuration par dfaut d'Apache propose deux fichiers journaux, placs dans le rpertoire logs du rpertoire d'installation : b Le fichier access_log (access.log dans Windows). Contient des informations sur les requtes ayant t desservies par le serveur, comme l'URL demande ou l'adresse IP du client, et indique si la requte a russi ou a chou. b Le fichier error_log (error.log dans Windows). Contient des informations lies aux conditions de l'erreur, ainsi que diffrents vnements du cycle de vie du serveur.

Cration des formats de journaux


LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%h %l %u %t \"%r\" %>s %b" \"%{Referer}i\" \"%{User-agent}i\"" combined

La directive LogFormat permet de signaler Apache les aspects de la requte enregistrer. Des directives supplmentaires sont requises pour indiquer Apache l'endroit o ces informations doivent tre consignes, mais cela sera trait la section suivante. Cet exemple montre la configuration des deux formats les plus populaires, Common Log Format (Format de journal commun) et Combined Log Format (Format de journal combin). Quand Apache reoit une requte, il remplace chacun des champs dont le prfixe est un signe % par l'attribut de requte correspondant.

Cration des formats de journaux

47

Si vous utilisez CLF (Combined Log Format), chaque entre 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 entre 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 http://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 requte au serveur Web, ou le nom d'hte du client si vous avez activ HostNameLookups (192.168.200.4 dans cet exemple). b %u. L'identifiant de l'utilisateur qui a envoy la requte dtermine par l'authentification HTTP (utilisateur dans cet exemple). Consultez le Chapitre 6 pour en savoir plus sur la configuration de l'authentification fonde sur HTTP. b %t. L'heure laquelle la requte est parvenue au serveur. b %r. Le texte de la ligne de requte initiale du client comprenant la mthode HTTP utilise, la ressource demande et la version du protocole HTTP employe par le navigateur du client ("GET /exemple.png HTTP/1.0" ici). b %>s. Le code de statut de la requte HTTP finale que le serveur Web envoie au client (200 dans cet exemple, ce qui signifie que la requte s'est termine avec succs).

48

CHAPITRE 3 Journaux et surveillance

b %b. La taille, en octets, de l'objet envoy au client en rponse la requte, en excluant les en-ttes de rponse (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-tte de la requte HTTP Referer, c'est--dire la page Web qui a fait rfrence au document actuel (http://www.exemple.com/index.html dans cet exemple). b %{User-agent}i. L'en-tte de la requte HTTP User-agent. Il contient des informations sur le navigateur du client ("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7)" dans cet exemple).

Cration d'un chier journal personnalis


CustomLog logs/access_log common TransferLog logs/sample.log

Vous pouvez crer de nouveaux fichiers journaux, en complment de ceux proposs dans Apache. Cet exemple utilise CustomLog pour crer un nouveau fichier journal et stocker les informations d'un fichier journal prcdemment dfini appel common (vu la section prcdente). Vous pouvez remplacer le nom par la dfinition du format elle-mme. Une directive supplmentaire plus simple, TransferLog, extraira simplement la dfinition fournie par la dernire directive LogFormat.

Redirection des journaux vers un programme externe

49

Redirection des journaux vers un programme externe


TransferLog "|bin/rotatelogs /var/logs/apachelog 86400"

Vous pouvez galement utiliser CustomLog ou TransferLog pour rediriger ("pipe") le rsultat du journal vers un programme externe plutt que vers un fichier. Pour cela, commencez par le caractre pipe ("|"), suivi du chemin vers le programme qui recevra les informations de journal sur son entre standard. Cet exemple met en uvre le programme rotatelogs, livr avec Apache (qui sera dcrit dans une section ultrieure). Lorsque vous employez un programme externe, il s'excute sous le nom de l'utilisateur qui a dmarr httpd. Il s'agit de la racine si le serveur a t dmarr par la racine ; assurez-vous que le programme est scuris. De mme, lorsque vous entrez un chemin de fichier sur des plates- formes diffrentes d'UNIX, prenez soin de n'employer que des barres obliques (mme si les barres obliques inverses sont autorises). D'une faon gnrale, il est conseill de toujours utiliser des barres obliques dans les fichiers de configuration.

Consignation conditionnelle de requtes


SetEnvIf Request_URI "(\.gif|\.jpg)$" image CustomLog logs/access_log common env=!image SetEnvIf Remote_Addr 192\.168\.200\.5 specialmachine CustomLog logs/special_access_log common env=specialmachine

Vous pouvez dcider de consigner une requte selon qu'il existe ou non une variable d'environnement. Cette variable peut avoir t prcdemment dfinie en fonction de

50

CHAPITRE 3 Journaux et surveillance

plusieurs paramtres, notamment l'adresse IP du client ou la prsence d'un en-tte donn dans la requte. Nous le voyons dans l'exemple, la directive CustomLog peut accepter une variable d'environnement comme troisime argument. L'entre ne sera consigne que si la variable existe. Si la variable d'environnement est nie par un prfixe "!", l'entre ne sera consigne 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 consigner des requtes d'une adresse IP particulire dans un fichier journal spar. Consultez la section suivante pour en dcouvrir un autre exemple.

Surveillance des personnes se connectant votre site


SetEnvIfNoCase Referer www\.exemple\.com internalreferral LogFormat "%{Referer}i -> %U" referer CustomLog logs/referer.log referer env=!internalreferral

Pour surveiller les personnes qui se connectent votre site Web, vous pouvez consigner l'en-tte Referer: de la requte. Cet en-tte contient l'URL pointant vers la page demande. Mme s'il n'est pas toujours prsent ni prcis, il fonctionne dans la majorit des cas. Cet exemple montre comment utiliser une variable d'environnement pour consigner les informations de la rfrence (referrer) dans un fichier spar. Dans ce cas particulier, nous souhaitons simplement consigner les rfrences externes, et non celles provenant d'une page Web interne. Pour cela, nous vrifions ici que la rfrence correspond notre propre domaine.

Surveillance d'Apache avec mod_status

51

Surveillance d'Apache avec mod_status


<Location /server-status> SetHandler server-status Order Deny,Allow Deny from all Allow from 192.168.0 </Location>

Le module mod_status fournit l'administrateur des informations sur l'activit et les performances du serveur. Une page HTML s'affiche, proposant les statistiques du serveur sous une forme facilement lisible (le nombre de workers rpondant des requtes, le nombre de workers inactifs, l'heure laquelle le serveur a t dmarr ou redmarr, etc.). La directive ExtendedStatus On permet d'obtenir d'autres informations, par exemple la situation de chaque worker, le nombre total d'accs, les requtes actuelles traites, etc. N'oubliez pas que cet enregistrement de statistiques supplmentaires peut considrablement ralentir le serveur. Cet exemple montre comment activer la surveillance mod_status, tout en limitant l'accs aux informations certaines adresses IP uniquement. Vous pouvez alors accder aux statistiques du serveur l'aide d'un navigateur Web, en vous rendant sur la page http://www.exemple.com/ server-status.

52

CHAPITRE 3 Journaux et surveillance

Surveillance d'Apache avec SNMP


Il existe deux modules Open Source qui ajoutent des fonctionnalits SNMP (Simple Network Management Protocol) au serveur Web Apache. Ce protocole sert souvent grer les serveurs rseau et l'quipement d'une console centrale, comme HP OpenView et Tivoli. Le module permet de surveiller facilement les performances d'Apache en temps rel, notamment le temps de fonctionnement du serveur, la charge moyenne, le nombre d'erreurs sur une priode donne, le nombre d'octets et de requtes desservis, ainsi que de nombreux autres paramtres. Les modules SNMP peuvent aussi gnrer 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 ncessite un correctif sur le cur ("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 grer les ressources SNMP. Voyez notamment ceux qui se trouvent aux adresses http://www.net-snmp.org, OpenNMS (http://www.opennms.org) et Nagios (http://www.nagios.org).

Analyse des journaux l'aide d'outils Open Source

53

Analyse des journaux l'aide d'outils Open Source


Il existe plusieurs outils commerciaux et Open Source permettant de traiter et d'afficher les donnes du journal. Ils procdent souvent de cette manire : ils extraient un fichier journal, analysent son contenu, puis crent une srie de pages Web prsentant les statistiques pertinentes. Voici quelques applications trs connues, disponibles gratuitement 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 dtail, par exemple en affichant visuellement le chemin emprunt par vos visiteurs : b Visitors (http://www.hping.org/visitors/) ; b Pathalizer (http://pathalizer.bzzt.net/).

Surveillance de vos journaux en temps rel


En plus de mod_status et des divers modules SNMP dcrits prcdemment, un outil de ligne de commande, dnomm apachetop, peut tre tlcharg l'adresse http://clueful.shagged.org/apachetop. Il fonctionne la manire de l'outil de ligne de commande
top d'UNIX. Cependant, au lieu d'afficher la situation du

systme d'exploitation, il montre celle du serveur Web en temps rel.

54

CHAPITRE 3 Journaux et surveillance

Si vous excutez Apache sur un systme UNIX et que vous disposiez d'un site Web connaissant peu de trafic, l'utilitaire de ligne de commande tail suffit pour surveiller les entres de vos journaux d'accs et d'erreurs, mais de manire rudimentaire et en temps rel :
tail -f fichierjournal

D'autres programmes permettent d'identifier rapidement les problmes en analysant les journaux d'erreur, la recherche d'erreurs spcifiques, de requtes mal formes, etc., puis de les signaler : b Logscan (http://www.garand.net/security.php) ; b ScanErrLog (http://www.librelogiciel.com/software).

Consignation des requtes dans une base de donnes


Apache ne dispose pas d'outils permettant de consigner des informations vers des bases de donnes, mais il existe quelques scripts et modules tiers : b mod_log_sql vous permet de consigner des requtes directement dans une base de donnes MySQL. Vous le trouverez l'adresse http://www.outoforder.cc/ projects/apache/mod_log_sql/. b Vous pouvez ensuite interroger la base de donnes l'aide de l'outil LogView SQL d'Apache (http:// freshmeat.net/projects/apachelogviewsql/). b pglogd collecte les journaux et conserve les entres dans une base de donnes PostgreSQL. Vous le trouverez l'adresse http://www.digitalstratum.com/pglogd/.

Rotation et archivage des journaux

55

Rotation et archivage des journaux


CustomLog "|bin/rotatelogs /var/logs/apachelog 86400" common

Si votre site Web fait l'objet d'un trafic important, vos fichiers journaux vont grossir. Vous pouvez bien sr les archiver manuellement. Cependant, vous disposez de plusieurs mcanismes permettant de procder une rotation priodique, d'archiver et de compresser les anciens journaux intervalles dfinis. Pour viter d'arrter ou redmarrer le serveur lorsque vous manipulez les fichiers journaux, vous pouvez utiliser un programme intermdiaire qui consignera les requtes. Il se chargera ensuite de la rotation, de la compression et de l'archivage des journaux. Pour cela, Apache propose l'outil rotatelogs. Vous trouverez un programme analogue l'adresse http://cronolog.org/. Cet exemple fait appel l'outil rotatelogs pour crer un nouveau fichier journal et dplacer quotidiennement le journal actuel vers le rpertoire /var/logs (il y a 86 400 secondes dans une journe). Consultez la documentation Apache pour en savoir plus sur l'utilisation de rotatelogs et la faon de procder la rotation des journaux, en fonction de la taille et du nom des fichiers archivs en se basant sur un modle.
Attention Si le chemin pointant vers le programme de rotation des journaux comprend des espaces, vous devrez peut-tre les annuler en les faisant prfixer par une barre oblique inverse (\). Cela est particulirement courant sous Windows.

56

CHAPITRE 3 Journaux et surveillance

Contrle de la rsolution des adresses IP


HostNameLookups on

Si la directive HostNameLookups est rgle sur on, Apache tente de dterminer (rsoudre) le nom d'hte correspondant l'adresse IP du client lorsqu'il consigne la requte. Avec HostNameLookups rgl sur off, une entre 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 rgle sur on, cette mme entre ressemblera 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'htes.

Traitement d'adresses IP consignes


$ logresolve < access_log > resolved_log

Rgler HostNameLookups sur on peut avoir un effet sur les performances du serveur, notamment en allongeant les dlais de rponse. Pour viter d'utiliser ce paramtre, vous pouvez dsactiver la rsolution des noms et adopter un utilitaire de post-traitement indpendant, capable d'analyser les fichiers journaux et de remplacer les adresses IP par des

Redmarrage automatique d'Apache en cas de panne

57

noms d'htes. Ces outils sont plus efficaces, car ils placent les rsultats en cache et n'entranent pas de dlais lors de la rponse aux requtes des clients. Apache propose un outil de ce type, intitul logresolve (logresolve.exe dans Windows), qui lit les entres du journal partir de l'entre standard et produit le rsultat 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 rsultat d'une rsolution d'adresse IP ne correspondra pas toujours au nom de l'hte qui a vritablement envoy la requte. Ainsi, par exemple, s'il existe un proxy ou une passerelle entre le client et le serveur Web, l'adresse IP signale par HostNameLookups ou logresolve correspondra l'adresse IP du proxy ou de la passerelle. Vous obtiendrez alors le nom d'hte du serveur proxy ou du bloc IP gr par la passerelle, plutt que le nom d'un hte rel.

Redmarrage automatique d'Apache en cas de panne


#!/bin/bash if [ `ps -waux | grep -v grep | grep -c httpd` -lt 1 ]; then apachectl restart; fi

Si vous installez Apache sous Windows sous forme de service, sachez que vous pouvez le redmarrer automatiquement, 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 contrle le statut d'un autre programme.

58

CHAPITRE 3 Journaux et surveillance

Si, pour quelque raison que ce soit, le programme s'arrte le script de surveillance le redmarre. L'exemple montre un simple script Linux qui surveille la liste des processus systme, afin de s'assurer qu'il existe un processus httpd ; en cas d'arrt, un redmarrage est effectu. Pour l'utiliser, vous devez lui attribuer des autorisations d'excution, puis l'ajouter votre configuration cron de sorte qu'il soit excut intervalles prdfinis. 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 processus httpd spcifiques. La plupart des distributions de Linux comprennent galement leur propre script de surveillance gnrique, pouvant tre adapt Apache.

Fusion et sparation de chiers journaux


Lorsqu'une grappe de serveurs Web dessert un mme contenu, il est souvent ncessaire de fusionner tous les journaux de tous les serveurs en un seul fichier journal avant de le transfrer aux outils d'analyse. De mme, si un seul serveur Apache gre plusieurs htes virtuels, il faut parfois diviser un fichier journal en plusieurs fichiers diffrents, un pour chaque hte virtuel. Cela peut tre ralis 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 livrs avec un fichier de script de prise en charge, nomm split-logfile. Celui-ci se trouve dans le rpertoire support/ de la distribution de la source Apache.

Conservation de fichiers spars pour chaque hte virtuel

59

Le projet logtool propose une suite d'outils de manipulation des journaux, qui se trouve l'adresse http://www .coker.com.au/logtools/. L'outil vlogger permet de sparer un flux de journal en plusieurs fichiers journaux spcifiques un hte virtuel, ainsi que de remplacer des outils comme cronolog (nous l'avons fait la section prcdente). Il se trouve l'adresse http://n0rp.chemlab.org/vlogger/.

Conservation de chiers spars pour chaque hte virtuel


<VirtualHost 192.168.200.3> ServerName vhost1.exemple.com CustomLog logs/vhost1.exemple.com_log combined ErrorLog logs/vhost2.exemple.com_log ....... </Virtual Host>

Vous pouvez conserver des journaux d'accs spars pour chaque hte virtuel, l'aide d'une directive CustomLog insre dans une section <VirtualHost> (nous le voyons dans l'exemple). Vous pouvez aussi choisir de consigner les oprations de tous les htes virtuels dans le fichier access_log dfini dans le contexte du serveur global :
LogFormat "%v %h %l %u %t \"%r\" %>s %b" common_virtualhost CustomLog logs/access_log common_virtualhost
%v consignera le nom de l'hte virtuel qui dessert la

requte. Vous pouvez ensuite utiliser les outils dcrits la section prcdente pour traiter le fichier journal de rsultat, notamment si vous disposez d'un grand nombre d'htes virtuels.

60

CHAPITRE 3 Journaux et surveillance

Si vous ne voulez pas assurer le suivi des oprations d'un hte particulier, vous pouvez simplement employer : CustomLog /dev/null

Entres de journaux communes


En plus des informations indiques au Chapitre 2, cette section dcrit plusieurs entres de journal relatives certaines erreurs communes pouvant apparatre lorsque vous consultez vos fichiers journaux. La plupart peuvent tre ignores sans problme.

Fichier favicon.ico introuvable (File favicon.ico Not Found)


La plupart des navigateurs Web rcents acceptent l'affichage d'une icne personnalise prs de la barre d'emplacement du navigateur ou lors du stockage d'un signet. Pour cela, le navigateur exige un fichier spcifique du site Web (favicon.ico). Si ce fichier n'existe pas, il renvoie une erreur. Vous en saurez plus sur cette icne en vous reportant au Chapitre 1.

Fichier robots.txt introuvable (File robots.txt Not Found)


Le fichier robots.txt est ncessaire certains programmes, comme les outils de tlchargement automatique et les robots Web, lorsqu'ils accdent votre site Web. Ces programmes analysent les sites Web, en suivant et en tlchargeant tous les liens qu'ils trouvent de manire rcursive. Ils sont souvent associs des moteurs de recherche. Leur principal objectif est de stocker et d'indexer le contenu rcupr. Si le fichier robots.txt est absent, une erreur de ce type est renvoye.

Entres de journaux communes

61

httpd.pid cras (httpd.pid Overwritten)


Sous UNIX, le fichier httpd.pid contient le PID (identifiant de processus) du processus Apache en cours d'excution. Il est cr au dmarrage d'Apache et supprim sa fermeture. Si Apache n'est pas correctement ferm (par exemple si le serveur a d tre arrt manuellement), ou en cas d'erreur, le fichier n'est pas supprim. Il subsistera donc au prochain dmarrage du serveur et cette erreur sera renvoye.

Requtes "longues et tranges"


Il est possible que vous rencontriez des requtes 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 requtes de fichiers excutables qui n'existent pas sur votre site, comme cmd.exe, root.exe, dir, etc. Certaines entres de journal naissent de tentatives automatises pour exploiter les vulnrabilits des serveurs Web. Par chance, la plupart tant gnres par des vers ou d'autres applications malveillantes spcifiques Microsoft Internet Information Server sous Windows, Apache n'en est pas affect. Toutefois, de temps en temps, des dfauts sont dcouverts dans Apache ; cela peut le rendre vulnrable des attaques distantes. Il est donc recommand d'actualiser votre serveur Apache (voir Chapitre 6).

4
Mappage d'URL et contenu dynamique
Mappage d'URL
Ce chapitre explique comment configurer Apache pour mapper (mettre en correspondance) des requtes avec des fichiers et des rpertoires, ou les rediriger vers des pages ou des serveurs spcifiques. Ces informations sont utiles pour rsoudre des problmes habituels, par exemple : continuer travailler avec des URL lorsque la structure du site change, traiter les sites Web sensibles la casse, prendre en charge plusieurs langues, etc. Nous expliquerons galement comment utiliser le CGI et les fonctionnalits SSI prsentes dans Apache de manire fournir un contenu gnr de manire dynamique.

64

CHAPITRE 4 Mappage d'URL et contenu dynamique

Mappage d'URL et de chiers avec Alias


Alias /icons/ /usr/local/apache2/icons/

Il n'est pas ncessaire que la structure d'un site Web corresponde la disposition des fichiers sur disque. En effet, la directive Alias permet d'effectuer la correspondance entre des rpertoires sur disque et des URL spcifiques. Grce cette directive, une requte pour http://www .exemple.com/icons/image.gif amne Apache rechercher le fichier du rpertoire /usr/local/apache2/icons/ image.gif (au lieu de la racine des documents par dfaut dans /usr/local/apache2/htdocs/icons/image.gif). Attention, les barres obliques de fin de la directive Alias sont importantes. Si vous les incluez, la requte client doit galement les faire figurer, faute de quoi la directive n'aura aucun effet. Par exemple, si vous utilisez la directive suivante :
Alias /icons/ /usr/local/apache2/icons/

et que vous demandez http://www.exemple.com/icons, le serveur renverra une erreur "404 Document Not Found".

Mappage de motifs d'URL des chiers avec AliasMatch


AliasMatch ^/(docs|help) /usr/local/apache/htdocs/manual

La directive AliasMatch prsente un comportement analogue Alias, mais elle permet de prciser une expression rgulire pour l'URL. Les correspondances peuvent tre

Redirection d'une page vers un autre emplacement

65

remplaces dans le chemin de destination. Par exemple, cette directive dsignera n'importe quelle URL sous /help ou /docs pointant vers les chemins du systme de fichiers du rpertoire manual. Les expressions rgulires sont des chanes permettant de dcrire un jeu de chanes ou qui concordent avec lui, et ce en fonction de certaines rgles de syntaxe. Vous en saurez plus sur les expressions rgulires l'adresse http://fr.wikipedia.org/wiki/ Expression_r%C3%A9guli%C3%A8re.

Redirection d'une page vers un autre emplacement


Redirect /news http://news.exemple.com Redirect /latest /3.0

La structure d'un site Web ordinaire change avec le temps. Vous ne pouvez pas toujours contrler la manire dont les autres sites se lient au vtre, par exemple en ce qui concerne les moteurs de recherche prsentant des liens casss. Pour viter les erreurs lorsque des personnes accdent votre site Web l'aide de liens anciens, vous pouvez configurer Apache avec la directive Redirect qui redirige ces requtes vers la ressource correcte, qu'elle se trouve sur le serveur actuel ou un autre. Mme 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 et une URL de destination. L'URL de destination peut se trouver sur le mme serveur Web ou pointer vers un serveur diffrent. Dans cet exemple, une requte pour http://www.exemple.com/news/today/index.html sera redirige vers http://news.exemple.com/today/index.html.

66

CHAPITRE 4 Mappage d'URL et contenu dynamique

Redirection vers la dernire version d'un chier


RedirectMatch myapp-(1|2)\.([0-9])(\.[0-9])?-(.*) /myapp-3.0-$4

La directive RedirectMatch est identique Redirect, mais elle permet d'utiliser une expression rgulire comme chemin de l'URL d'origine. Cela apporte beaucoup plus de flexibilit. Prenons l'exemple d'un diteur de logiciels qui distribue des tlchargements 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 tlcharger d'anciennes versions du logiciel sur des sites Web tiers n'ayant pas encore mis jour leurs liens. Grce RedirectMatch, ces utilisateurs peuvent tre facilement redirigs vers la version la plus rcente. Supposons que le nom de la dernire version du fichier tlchargeable soit myapp-3.0. Cet exemple redirige les requtes pour http://www.exemple.com/myapp-2.5.1-demo.tgz vers http://www.exemple.com/myapp-3.0-demo.tgz et les requtes pour http://www.exemple.com/myapp-1.2-manual .pdf vers http://www.exemple.com/myapp-3.0-manual.pdf. Les trois premiers lments de l'expression rgulire correspondront au numro principal et au numro secondaire, puis un numro de correctif optionnel. Ceux-ci seront remplacs par 3.0. Le reste du nom du fichier est extrait du dernier groupe de l'expression rgulire et remplac dans l'URL de destination.

Echec de la redirection ou requtes non autorises

67

Echec de la redirection ou requtes non autorises


ErrorDocument 404 /search.html

Si vous grez un site Web populaire ou complexe, quelles que soient les prcautions prises, vous allez recevoir plusieurs requtes d'URL concernant des documents non valides ou qui n'existent plus. Mme si nombre d'entre elles peuvent tre traites en faisant bon usage des Redirect, certaines se termineront tout de mme par la terrible rponse "404 Document Not Found". Il peut donc tre souhaitable de modifier la page d'erreur par dfaut d'Apache et de diriger vos utilisateurs vers un emplacement particulier sur votre site Web. Il peut s'agir d'une page qui aide vos visiteurs trouver la ressource demande, 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 complmentaires sur la personnalisation des pages de refus d'accs.

Dnition des gestionnaires de contenu


AddHandler cgi-script .pl .cgi <Location "/cgi-bin/*.pl"> Options +ExecCGI SetHandler cgi-script </Location>

Les gestionnaires permettent Apache de dterminer les actions raliser sur le contenu demand. Ce sont les modules qui proposent des gestionnaires ; Apache doit

68

CHAPITRE 4 Mappage d'URL et contenu dynamique

tre configur pour associer un contenu des gestionnaires spcifiques. Cette fonctionnalit est souvent annexe aux modules de gnration de contenu, comme PHP et mod_cgi. L'exemple montre comment associer le gestionnaire cgi-handler aux fichiers que vous souhaitez excuter sous forme de CGI. La directive AddHandler associe un gestionnaire certaines extensions de noms de fichiers. RemoveHandler peut servir supprimer des associations pralables. Dans cet exemple, AddHandler indique Apache de traiter tous les documents prsentant des extensions cgi ou pl comme des scripts CGI. La directive SetHandler permet d'associer un gestionnaire tous les fichiers d'un rpertoire ou d'un emplacement particulier. La directive Action, que vous verrez plus loin dans ce chapitre, associe un type MIME ou un gestionnaire particulier un script CGI.

Les types MIME


MIME est un ensemble de normes qui dfinissent, entre autres 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 catgorie principale du contenu (texte, son, image, vido) et le second au type spcifique. Apache utilise les types MIME, d'une part pour dterminer ceux des modules ou des filtres qui traiteront un certain contenu, d'autre part pour ajouter des en-ttes HTTP la rponse, afin d'identifier son type de contenu. Ces en-ttes serviront l'application cliente pour identifier et afficher correctement le contenu destination de l'utilisateur final.

Configuration des types MIME

69

Conguration des types MIME


AddType text/xml .xml .schema <Location /xml-schemas/> ForceType text/xml </Location>

Comme pour les gestionnaires de contenu, les types MIME peuvent tre associs 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 dfaut, Apache contient un fichier mime.types qui comprend les types MIME les plus communs et leurs extensions associes.

Les bases de l'excution des scripts CGI


CGI signifie Common Gateway Interface (interface de passerelle commune). Il s'agit d'un protocole standard utilis par les serveurs Web pour communiquer avec des programmes externes. Le serveur Web fournit toutes les informations ncessaires sur la requte un programme externe, qui la traite et renvoie une rponse. La rponse est alors envoye au client. CGI ayant t le premier mcanisme gnrer un contenu unique pour chaque requte la vole ("contenu dynamique"), il est pris en charge par la quasi-totalit des serveurs Web. Apache accepte les CGI, grce au module Apache mod_cgi (mod_cgid lors de l'excution d'un serveur Apache avec des threads).

70

CHAPITRE 4 Mappage d'URL et contenu dynamique

Attention ! Des programmes CGI d'exemple ou mal crits peuvent constituer un risque pour la scurit. Si vous n'utilisez pas cette fonctionnalit, il est recommand de la dsactiver globalement (voir Chapitre 6).

Dsignation de ressources comme des CGI excutables


ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin

Cette section prsente plusieurs manires d'indiquer Apache que le fichier cible d'une requte particulire est un script CGI. Cela est ncessaire pour viter qu'Apache n'envoie directement le contenu d'un fichier au client, mais renvoie plutt le rsultat de son excution. La directive ScriptAlias est semblable la directive Alias (dcrite plus tt dans ce chapitre), la seule diffrence qu'Apache traite chaque fichier du rpertoire cible comme tant un script CGI. De mme, vous pouvez utiliser 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'excution du CGI est autorise. L'exemple suivant demande Apache de considrer toutes les URL se terminant par une extension de fichier .pl comme des scripts CGI :
<Location "/cgi-bin/*.pl"> Options +ExecCGI SetHandler cgi-script </Location>

Association de scripts des mthodes HTTP et des types MIME

71

Association de scripts des mthodes HTTP et des types MIME


# Traitement de toutes les images GIF via un script CGI # avant de les servir Action image/gif /cgi-bin/filter.cgi # Association de mthodes HTTP spcifiques un script # CGI Script PUT /cgi-bin/upload.cgi

Outre les directives mentionnes dans la section prcdente, Apache en propose certaines qui simplifient l'association de types MIME spcifiques, d'extensions de fichiers, voire de mthodes HTTP spcifiques, un CGI particulier. Le module mod_actions, qui figure dans la distribution de base et qui est compil par dfaut, propose les directives Action et Script, prsentes 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 grer la requte. b La directive Script associe certaines mthodes de requte 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 (chemin de document). Comme dans l'exemple de la section prcdente, le rpertoire contenant le CGI de destination doit tre dsign comme autorisant l'excution de CGI avec une directive ScriptAlias ou le paramtre ExecCGI de la directive Options.

72

CHAPITRE 4 Mappage d'URL et contenu dynamique

Dpannage relatif l'excution des scripts CGI


ScriptLog logs/cgi_log

En plus des modules et des techniques prsents aux Chapitres 2 et 3, il est noter que le module mod_cgi propose la directive ScriptLog pour aider au dbogage des scripts CGI. S'il est activ, il conservera des informations pour chaque chec d'excution CGI, notamment les en-ttes HTTP, les variables POST, etc. Le fichier peut rapidement grossir, mais vous pouvez en limiter la taille grce aux directives ScriptLogBuffer et ScriptLogLength.

Amlioration des performances du script CGI


L'un des principaux inconvnients du dveloppement de CGI rside dans l'impact qu'il a sur les performances, en plus de la ncessit de dmarrer et d'arrter des programmes chaque requte. mod_perl et FastCGI sont deux solutions ce problme. Tous deux exigent toutefois un examen minutieux du code existant. En effet, vous ne pourrez plus supposer que les ressources seront automatiquement libres par le systme d'exploitation aprs que la requte aura t desservie.
mod_perl est un module, disponible pour Apache 1.3

et 2.0. Il intgre un interprteur Perl dans le serveur Web Apache. En plus d'une API puissante pour les lments internes Apache, mod_perl bnficie d'un mode de compatibilit CGI, dans lequel les CGI Perl existants peuvent

SSI

73

s'excuter avec peu, voire pas, de modification. Les scripts s'excutant l'intrieur d'un interprteur qui persiste dans le processus, aucune pnalit n'est applique au dmarrage.
FastCGI est un standard qui permet une mme instance d'un programme CGI de rpondre plusieurs requtes au fil du temps. Vous trouverez les spcifications et pourrez tlcharger les modules pour Apache 1.3 et 2.x l'adresse http://www.fastcgi.com. FastCGI a regagn de la popularit aprs avoir t utilis dans les structures de dveloppement Web comme Ruby-on-Rails.

SSI
Document on disk This document, <!--#echo var="DOCUMENT_NAME" -->, was last modified <!--#echo var="LAST_MODIFIED" --> Content received by the browser This document, sample.shtml, was last modified Sunday, 14-Sep-2005 12:03:20 PST

SSI est une technologie Web simple, de la "vieille cole", un prdcesseur d'autres langages intgrs HTML, comme PHP. SSI fournit un mcanisme simple et efficace pour ajouter facilement des lments de contenu dynamique, par exemple un pied de page commun chaque page indiquant la date et l'heure auxquelles la page a t servie. Autre exemple, la distribution Apache 2.0 utilise SSI pour personnaliser les messages d'erreur. SSI fonctionne en intgrant des instructions de traitement spcifiques dans des pages 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.

74

CHAPITRE 4 Mappage d'URL et contenu dynamique

Conguration de SSI
AddType text/html .shtml AddHandler server-parsed .shtml

La fonctionnalit SSI est apporte par le module mod_include, distribu avec Apache. La manire la plus simple de le configurer consiste associer une extension au gestionnaire de contenu server-parsed, comme indiqu dans l'exemple.

Paramtrage des variables d'environnement


SetEnv foo bar UnSetEnv foo PassEnv foo

Les variables d'environnement sont des variables qui peuvent tre partages entre des modules et qui sont galement disponibles pour des processus externes, comme les CGI et les documents SSI. Les variables d'environnement peuvent galement tre utilises pour la communication entre modules et pour baliser certaines requtes des fins de traitement spcifique. Vous pouvez paramtrer les variables d'environnement l'aide de la directive SetEnv. Ainsi, les variables seront disponibles pour les scripts CGI et les pages SSI et pourront tre consignes ou ajoutes un en-tte. Par exemple :
SetEnv foo bar

crera la variable d'environnement foo et lui affectera la valeur bar.

Paramtrage dynamique des variables d'environnement

75

A l'inverse, vous pouvez supprimer des variables spcifiques, 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 variable contient un chemin vers des bibliothques dynamiques chargeables dans certains systmes UNIX, comme Linux.
Accs une variable d'environnement Pour accder une variable d'environnement nomme foo dans une page SSI, tapez :

<!--#echo var="foo" -->


Sa valeur peut tre consigne avec l'option de mise en forme %{foo}e (voir Chapitre 3) ou ajoute un en-tte HTTP (voir Chapitre 10), avec :

RequestHeader set X-Foo "%{foo}e"

Paramtrage dynamique des variables d'environnement


SetEnvIf HTTP_USER_AGENT MSIE iexplorer SetEnvIf HTTP_USER_AGENT MSIE iexplorer=foo SetEnvIf HTTP_USER_AGENT MSIE !JavaScript

La directive SetEnvIf permet de paramtrer des variables d'environnement en fonction des informations de la requte, comme le nom d'utilisateur, le fichier demand ou une valeur d'en-tte HTTP spcifique.

76

CHAPITRE 4 Mappage d'URL et contenu dynamique

Cette directive prend un paramtre de requte, une expression rgulire et un ensemble de variables, qui sera modifi si le paramtre correspond l'expression. Cet exemple concerne les navigateurs Microsoft Internet Explorer. Il montre comment paramtrer une variable, lui affecter une valeur arbitraire foo et mme lui affecter une expression de ngation. Par la suite, vous pourrez rechercher l'existence et la valeur de cette variable pour raliser diverses actions, comme la consignation d'une requte spcifique ou l'envoi d'un contenu diffrent en fonction du type de navigateur. Il est possible, par exemple, d'envoyer des pages HTML simplifies des navigateurs texte, comme Lynx, ou des navigateurs sur tlphones portables et assistants personnels. En ralit, la recherche de l'agent utilisateur du client est tellement 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 utilises pour simplifier les expressions rgulires dans certaines situations.

Variables d'environnement spciales


BrowserMatch "Mozilla/2" nokeepalive

Apache propose un ensemble de variables d'environnement spciales. Si l'une d'elles est dfinie, Apache modifie son comportement. Elles servent gnralement passer outre

Ngociation du contenu

77

des clients qui prsentent des bogues. Par exemple, la variable nokeepalive dsactive la prise en charge du maintien en activit dans Apache, qui rduit les performances du serveur (plusieurs requtes ne pouvant pas tre transmises sur la mme connexion). De fait, elle ne doit tre paramtre que lorsque la requte est ralise par un client qui ne prend pas correctement en charge cette fonctionnalit, gnralement 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 spciales utilises pour contourner des problmes dans les implmentations SSL et DAV.

Ngociation du contenu
AddCharset UTF-8 .utf8 AddLanguage en .en AddEncoding gzip .gzip .gz

Le protocole HTTP propose des mcanismes permettant de conserver diffrentes versions d'une ressource donne et de renvoyer le contenu appropri en fonction des capacits et des prfrences du client. Par exemple, un client peut vous informer qu'il est capable d'accepter un contenu compress (mme si sa langue de prfrence est l'anglais, il comprendra galement les pages crites en espagnol). Les trois principaux aspects ngocis sont les suivants : b Le codage. Il s'agit du format dans lequel une ressource est conserve ou reprsente. Il peut gnralement tre dtermin partir de l'extension du fichier. Ainsi, le fichier listing.txt.gz possde un type MIME text/plain et un codage gzip. Le codage de la ressource sera annex l'en-tte Content-Encoding: de la rponse.

78

CHAPITRE 4 Mappage d'URL et contenu dynamique

b Le jeu de caractres. Cette proprit dcrit le jeu de caractres utilis par un document. Le jeu de caractres de la ressource sera annex l'en-tte Content-Type: de la rponse, avec le type MIME. b La langue. Vous pouvez proposer diffrentes versions de la mme ressource. Par exemple, la documentation Apache propose index.html.en, index.html.es, index .html.de, etc. La langue de la ressource sera annexe l'en-tte Content-Language: de la rponse. L'exemple montre comment associer des jeux de caractres, des langues et des codages des extensions de fichiers particulires.

Conguration de la ngociation du contenu


Options +Multiviews AddHandler type-map .var

Il existe deux mthodes principales pour configurer la ngociation du contenu dans Apache : le mode Multiviews et les correspondances de type (type maps). Le mode Multiviews peut tre activ en ajoutant une directive Options +Multiviews une configuration. Nous dconseillons cette mthode, except pour les sites Web simples, car elle n'est pas trs efficace. En effet, pour chaque requte, elle analyse le rpertoire 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 dterminer le codage du contenu et le jeu de caractres, puis pour renvoyer le contenu appropri.

Configuration de la ngociation du contenu

79

Il vaut mieux employer les correspondances de type, qui limitent les recherches sur le systme de fichiers. Il s'agit de fichiers spciaux qui mettent en correspondance les noms de fichiers et les informations (mtadonnes) les concernant. Vous pouvez configurer une correspondance de type pour une ressource donne en crant un fichier portant le mme nom et l'extension .var, puis en ajoutant une directive AddHandler (comme indiqu dans la configuration d'exemple). Le fichier peut contenir plusieurs entres. Chacune commence par URI: (c'est--dire le nom du document, suivi de plusieurs attributs comme Content-Type:, Content-Language: et Content-Encoding:). Le Listing 4.1 montre un exemple de fichiers de correspondance de type.
Listing 4.1 Contenu d'un chier 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-2 Content-language: fr

Astuce N'oubliez pas que l'utilisation d'un type de ngociation de contenu affecte les performances du serveur Web, car cela ncessite des accs supplmentaires au systme de fichiers.

80

CHAPITRE 4 Mappage d'URL et contenu dynamique

Affectation de jeux de caractres par dfaut et de priorits de langue


DefaultLanguage en AddDefaultCharset iso-8859-1 LanguagePriority en es de

Il est possible de dsigner un jeu de caractres par dfaut pour les documents n'en disposant pas, l'aide de AddDefaultCharset, comme indiqu dans l'exemple. Une autre option consiste spcifier AddDefaultCharset Off pour dsactiver l'ajout d'un jeu de caractres aux documents qui n'en possdent pas. Vous pouvez galement choisir une langue par dfaut grce la directive DefaultLanguage. Pour un site Web en anglais, le paramtre serait en, comme indiqu dans l'exemple. Enfin, si le client n'adopte aucune prfrence de langue, vous pouvez utiliser LanguagePriority pour dterminer l'ordre de prfrence 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 adresses suivantes : http://httpd.apache.org/docs/2.0/mode /mod_negotiation.html et http://httpd.apache.org /docs/2.0/mod/mod_mime.html.

Mappage avanc d'URL avec mod_rewrite

81

Mappage avanc d'URL avec mod_rewrite


Apache propose un module trs puissant, mod_rewrite, qui permet de manipuler les URL de manire quasi illimite l'aide des expressions rgulires. Du fait de sa complexit, ce module ne sera pas trait dans cet ouvrage autrement que dans une rfrence spcifique 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.

Problme de l'oubli de la barre oblique nale


DirectorySlash On

Certaines URL ne peuvent fonctionner que si elles possdent une barre oblique de fin. Cette situation apparat si vous ne chargez pas mod_dir dans le serveur ou lorsque les redirections ralises par mod_dir ne fonctionnent pas correctement avec la valeur spcifie dans la directive ServerName, comme expliqu dans la section "Les redirections ne fonctionnent pas", au Chapitre 2. N'oubliez pas, lorsque vous accdez certaines URL correspondant des rpertoires, d'ajouter une barre oblique ("/") la fin de l'URL. Le rpertoire peut contenir

82

CHAPITRE 4 Mappage d'URL et contenu dynamique

un fichier d'index ou un index de rpertoire. Cet oubli est une erreur courante. Ainsi, quand mod_dir "imagine" que cela peut tre le cas, il procde la redirection approprie. Par exemple, si mod_dir est activ sur le serveur et que vous disposez d'un rpertoire nomm foo sous la racine de document, une requte pour http://exemple.com/foo sera redirige vers http://exemple.com/foo/. Il s'agit du comportement par dfaut sous Apache 1.3 et 2.0 lorsque mod_dir est charg dans le serveur. Sous Apache 2, vous pouvez dsactiver cette redirection, l'aide d'une directive DirectorySlash :
DirectorySlash Off

Correction des fautes de frappe


CheckSpelling on
mod_speling est un module Apache qui reconnat les

URL mal orthographies et redirige l'utilisateur vers l'emplacement correct du document. mod_speling est capable de corriger les URL dont la casse est errone ou dont une lettre manque (ou est incorrecte). Cela est trs frquent lorsque les utilisateurs tapent l'URL dans le navigateur. Par exemple, supposons qu'un utilisateur demande le fichier file.html mais que celui-ci ne soit pas prsent. 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 requtes vers des liens casss.

Rsolution des problmes de casse

83

Pour activer la vrification orthographique, vous pouvez ajouter CheckSpelling on votre configuration Apache, comme indiqu dans l'exemple.
Info S'il existe plusieurs documents ressemblant une adresse mal orthographie, le module en renvoie une liste. Attention, toutefois ! Cela pourrait prsenter des risques pour la scurit, ces fichiers ne pouvant pas tous tre proposs au public.

Rsolution des problmes de casse


NoCase on

Windows possde un systme de fichiers non sensible la casse, la diffrence de la plate-forme UNIX. Cela cre gnralement des problmes lors de la migration de sites Web entre les deux systmes. Des URL, comme http://www.exemple.com/images/icon.PNG, qui fonctionnaient bien sous Windows, commencent renvoyer des erreurs du type "Document Not Found". En effet, le fichier sur disque s'intitule icon.png et n'est pas quivalent, sous UNIX, au fichier icon.PNG demand. Ce problme peut tre rsolu en vrifiant et en rcrivant manuellement chaque lien, ou en activant le module mod_speling, comme indiqu la section prcdente. Il existe galement un autre module, objectif unique, pouvant tre utilis dans ce but : mod_nocase. Ce module, initialement fond sur mod_speling, cre une requte GET pour des URL non sensibles la casse. Il recherche une correspondance exacte ; s'il ne la trouve pas, il tente

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 slectionn. Pour activer mod_nocase, vous devez le charger dans le serveur et inclure une directive NoCase dans votre fichier de configuration Apache, comme indiqu dans l'exemple.
mod_nocase peut tre tlcharg 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


AddOutputFilterByType TIDY text/html application/ xhtml+xml TidyOption char-encoding utf8

Indpendamment du fait que vous ayez gnr vos pages HTML de manire dynamique ou que vous les ayez codes la main, si elles contiennent des erreurs de marquage, il est possible qu'elles ne s'affichent pas correctement dans tous les navigateurs. Tidy est un outil de ligne de commande utile, capable de traiter les codes HTML et XML mal forms, de corriger de nombreuses erreurs communes et de produire une sortie conforme aux standards. Vous le trouverez l'adresse http://tidy.sourceforge.net/. Vous pouvez excuter Tidy partir de la ligne de commande sur des fichiers statiques, grce mod_tidy et l'architecture de filtre Apache 2, le contenu trait tant desservi la vole. 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

Validation de pages avec Tidy

85

comment employer TidyOption pour configurer le comportement du moteur Tidy. L'architecture de filtre et la configuration d'Apache sont dcrites au Chapitre 11. Vous pouvez tlcharger mod_tidy l'adresse http:// home.snafu.de/tusk/mod_tidy/. Un autre module d'Apache 2, mod_validator, peut tre tlcharg l'adresse http://www.webthing.com/ software/mod_validator/.

5
Hbergement virtuel
Ce chapitre explique comment hberger plusieurs sites Web grce une seule instance du serveur Apache, en utilisant la fois un hbergement virtuel fond sur le nom et un hbergement virtuel fond sur l'adresse IP. Il traite galement de sujets lis l'hbergement de plusieurs utilisateurs, par exemple avec les rpertoires d'accueil et les fichiers de configuration par rpertoire.

Dnition de l'hbergement virtuel


L'hbergement virtuel est une fonction que proposent la plupart des serveurs Web modernes. Cela permet de desservir des sites Web varis, chacun tant identifi par un ou plusieurs domaines, l'aide d'une seule instance d'un serveur. Un autre avantage rside dans la possibilit de centraliser l'administration et d'optimiser l'utilisation des

88

CHAPITRE 5 Hbergement virtuel

ressources du systme. De nombreux fournisseurs d'hbergement pour des sites Web commerciaux peuvent rpondre des centaines de clients l'aide d'une seule instance de serveur, vitant ainsi de grer des centaines de serveurs Apache en arrire-plan.

Hbergement virtuel bas sur IP


<VirtualHost 192.168.200.4:80> () </VirtualHost>

La manire la plus facile d'assurer un hbergement virtuel consiste employer une combinaison adresse IP/port laquelle le client se connecte. Apache peut tre configur pour accepter un hbergement virtuel bas sur IP l'aide des sections <VirtualHost>. Chaque section <VirtualHost> contient des directives de configuration qui seront appliques aux requtes envoyes l'adresse IP (et, en option, au numro de port) spcifie dans la balise ouvrante. Bien entendu, le serveur Apache qui s'excute doit avoir t configur avec ces adresses IP.
Info En cas d'coute sur des ports non standard, n'oubliez pas de fournir une directive Listen pour chacun d'entre eux. Attention, il ne suffit pas qu'ils soient lists dans la section <VirtualHost> pour qu'Apache coute leurs requtes.

L'hbergement virtuel bas sur IP prsente toutefois l'inconvnient de devoir affecter une adresse IP diffrente chaque hte virtuel.

Configuration de l'hbergement virtuel bas sur IP

89

Conguration de l'hbergement virtuel bas sur IP


L'exemple du Listing 5.1 montre trois htes virtuels bass sur IP, desservant un contenu pour trois sites Web : www.exemple.com, une version intermdiaire de www.exemple.com et www.exemple.net. La directive ServerName figurant dans chaque section sert construire des URL autorfrentielles. La directive DocumentRoot prcise l'emplacement du contenu du site Web pour chaque hte virtuel. Il est galement possible de consigner les requtes et les erreurs pour chaque hte virtuel dans un fichier diffrent. Pour cela, il convient de placer des directives de consignation, comme TransferLog et ErrorLog, dans la section d'hte virtuel (voir Chapitre 3). Les adresses et les ports rpertoris dans la balise ouvrante d'une dfinition <VirtualHost> n'auront pas d'effet sur les adresses ou les ports qu'coute Apache. Vous devrez donc toujours fournir les directives Listen appropries. Si aucun port n'est spcifi dans une dfinition <VirtualHost>, celui prcis dans la directive Apache la plus rcente sera utilis. Il est galement possible de prciser un caractre joker ("*") pour couter les requtes dans tous les ports qu'coute Apache, comme indiqu dans l'hte virtuel exemple.net.
Listing 5.1 Conguration d'htes virtuels bass sur IP

Listen 8080 Listen 80 <VirtualHost 192.168.200.2> ServerName www.exemple.com DocumentRoot /usr/local/Apache/sites/exemple.com </VirtualHost>

90

CHAPITRE 5 Hbergement 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>

Hbergement virtuel bas sur le nom


Nous l'avons vu, l'hbergement virtuel IP ncessite une adresse IP diffrente pour chaque site Web. Cela gnre un certain nombre de problmes si vous devez hberger un grand nombre de sites ou que vous ne puissiez pas ou ne vouliez pas payer plusieurs adresses IP. Cela sera notamment le cas si vous souhaitez grer plusieurs sites Web personnels sur votre propre serveur via une ligne DSL. L'hbergement virtuel bas sur le nom est utile car la plupart des navigateurs rputs (et la quasi-totalit des navigateurs rcents) transmettent un en-tte Host: dans leur requte HTTP. C'est une exigence du protocole HTTP/1.1, mais cela apparat galement dans la plupart des implmentations de HTTP/1.0. Il est ainsi possible de choisir les informations prsenter l'utilisateur en fonction des donnes de la requte HTTP, plutt que d'afficher les donnes de la connexion elle-mme. Cela permet plusieurs htes virtuels de partager la mme combinaison adresse IP/port.

Configuration de l'hbergement virtuel bas sur le nom

91

Conguration de l'hbergement virtuel bas sur le nom


La configuration des htes virtuels par noms est semblable celle des htes virtuels IP. L'exemple du Listing 5.2 montre deux htes virtuels partageant l'adresse IP 192.168.200.2. Apache dterminera l'hte virtuel vers lequel"router" la requte, en fonction de la valeur de l'en-tte Host: de la requte HTTP. Elle sera compare, des fins de correspondance, au nom d'hte fourni par ServerName, ainsi qu' tous les noms d'htes supplmentaires fournis par la directive ServerAlias, qui sont optionnels.
Listing 5.2 Conguration d'hte virtuel base sur le nom

Listen 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 ncessaire pour indiquer Apache qu'une adresse IP particulire servira pour les htes virtuels bass sur le nom. Vous pouvez indiquer Apache d'utiliser n'importe quelle adresse IP disponible pour l'hbergement virtuel bas sur le nom, avec :
NameVirtualHost *

92

CHAPITRE 5 Hbergement virtuel

Bien entendu, vos serveurs DNS doivent tre correctement configurs pour que les domaines www.exemple.com, exemple.com et Web.exemple.com soient rsolus sur l'adresse 192.168.200.2.

Que se passe-t-il si une requte ne correspond aucun hte virtuel ?


Si une requte ne correspond aucun hte virtuel, elle sera desservie par le serveur principal dans le cas d'un hbergement virtuel bas sur IP. Dans le cas d'un hbergement virtuel bas sur le nom, c'est le premier hte virtuel bas sur le nom qui prendra le pas. Consultez les deux sections suivantes pour en savoir plus sur la configuration d'un hte virtuel "tous usages" par dfaut.

Congurer un hte virtuel par dfaut, bas sur le nom


NameVirtualHost * <VirtualHost *> ... </VirtualHost>

Nous l'avons indiqu dans la section prcdente, c'est le premier hte virtuel prsent dans le fichier de configuration qui rpond aux requtes du domaine non explicitement gres par d'autres htes virtuels. Si vous hbergez plusieurs sites, il peut tre utile de configurer cet hte 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

Que se passe-t-il si une requte ne correspond aucun hte virtuel ?

93

du document, puis rediriger toutes les requtes qui lui sont adresses l'aide d'une directive AliasMatch. Vous obtiendrez un effet analogue en remplaant 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 Conguration d'un hte virtuel par dfaut bas sur le nom

NameVirtualHost * # La section ci-aprs doit tre place au-dessus de toute autre section d'hte virtuel <VirtualHost *> ServerName default.exemple.com DocumentRoot /usr/local/Apache/sites/default AliasMatch /* /default.html </VirtualHost>

Congurer un hte virtuel par dfaut bas sur IP


<VirtualHost _default_ > ServerName default.exemple.com DocumentRoot /usr/local/Apache/sites/default </VirtualHost>

La syntaxe spciale _default_ permet de dfinir un hte virtuel qui desservira les requtes de combinaisons adresse/port qui ne sont pas traites par d'autres htes virtuels. Vous pouvez galement prciser un numro de port dans la combinaison, l'aide du mot cl _default_ (comme dans l'exemple suivant, extrait de la configuration mod_ssl par

94

CHAPITRE 5 Hbergement virtuel

dfaut d'Apache). Cet exemple spcifie un hte virtuel qui coutera les requtes sur ce port particulier, pour toutes les adresses qui ne sont pas explicitement gres par d'autres htes virtuels :
<VirtualHost _default_:443> SSLEngine on ServerName secure.exemple.com:443 DocumentRoot /usr/local/Apache/sites/default ... </VirtualHost>

Mlange d'htes bass sur IP et bass sur le nom


Sachez qu'il est galement possible de spcifier la fois des htes virtuels bass sur IP et d'autres bass sur le nom (voir Listing 5.4). Au lieu d'utiliser NameVirtualHost *, vous devrez fournir des directives NameVirtualHost spares pour chaque adresse IP qui sera associe des htes virtuels bass sur le nom. Cet exemple montre deux htes virtuels bass sur le nom, associs l'adresse IP 192.168.200.2, et un hte virtuel bas sur IP, associ l'adresse IP 192.168.200.4.
Listing 5.4 Mlange d'htes bass sur IP et bass 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

Dbogage des configurations d'htes virtuels

95

</VirtualHost> <VirtualHost 192.168.200.4> ServerName www.exemple.net DocumentRoot /usr/local/Apache/sites/exemple.net </VirtualHost>

Dbogage des congurations d'htes virtuels


Vous 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 lies l'hte virtuel ont t traites, ile binaire httpd fournit des informations sur chaque hte virtuel configur et chaque valeur d'hte par dfaut. Il s'agit l d'un outil trs pratique pour dboguer des configurations d'htes virtuels complexes.
Listing 5.5 Vrication de la conguration d'un hte 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

96

CHAPITRE 5 Hbergement virtuel

Utilisation de SSL avec des htes virtuels bass sur le nom


En bref, SSL ne peut pas tre utilis avec les htes virtuels bass sur le nom, car il n'existe pas aujourd'hui de grand navigateur capable de le prendre en charge. Reportez-vous la section du mme nom dans le Chapitre 7 pour en savoir plus.

Alternative l'hbergement virtuel


UseCanonicalName Off VirtualDocumentRoot /usr/local/Apache/vhosts/%0 VirtualScriptAlias \ /usr/local/Apache/vhosts/%0/cgi-bin

Pour les utilisateurs qui disposent d'un grand nombre d'htes virtuels, il peut tre souhaitable d'adopter une approche diffrente d'hbergement. Cela est particulirement vrai pour les FAI, qui hbergent des milliers de clients. Dans le cas contraire, ils devront enregistrer des informations pour chacun des htes virtuels dans le fichier de configuration, puis redmarrer le serveur chaque modification.
mod_virtualhost_alias vous permet de configurer une

racine de document diffrente pour chaque hte virtuel, et ce de manire dynamique. Ainsi, la requte est mise en correspondance avec un chemin donn dans le systme de fichiers, en fonction des informations de la requte ellemme (comme l'adresse IP ou le nom d'hte). Cet exemple met en correspondance les requtes pour un nom d'hte particulier avec un chemin dans le systme de fichiers qui comprend ce nom d'hte (reprsent par %0 dans le chemin). De mme, la directive VirtualScriptAlias permet d'excuter des scripts CGI dans un chemin de rpertoire

Utilisation de SSL avec des htes virtuels bass sur le nom

97

bas sur le nom d'hte rfrenc dans la requte. Si un utilisateur envoie une requte pour /manual/index.html sur l'hte www.exemple.com, cette directive sera mise en correspondance avec /usr/local/Apache/vhosts/www.exemple.com/ manual/index.html. De la mme manire, vous pouvez effectuer la correspondance avec des adresses IP plutt que les noms d'htes, pour un hbergement virtuel bas sur IP, l'aide des directives VirtualDocumentRootIP et VirtualScriptAliasIP. Vous pouvez choisir de mettre en correspondance des requtes en fonction de certaines parties seulement du nom d'hte ou de l'adresse IP, ou en fonction du port de la requte. Pour cela, vous utiliserez diffrentes squences bases sur %, comme %p pour le numro de port, %1 pour la premire partie du domaine, %2 pour la deuxime, et ainsi de suite.

Autres modules d'hbergement virtuel


Le module mod_vhost_alias est probablement l'un des plus populaires parmi les htes virtuels de masse, du fait qu'il est intgr dans Apache. Il existe toutefois d'autres solutions, par exemple : b mod_vhost_ldap. Ce module Apache 2 permet de stocker des informations d'hte virtuel dans un rpertoire LDAP. Il peut tre tlcharg l'adresse http:// alioth.debian.org/projects/modvhostldap/. b mod_vhost_dbi. Ce module permet de stocker une configuration d'hte virtuel dans une base de donnes SQL, ce qui assure une grande flexibilit. Il s'excute sur Apache 2. Pour le tlcharger, rendez-vous l'adresse http://www.outforder.cc/projects/Apache/ mod_vhost_dbi/.

98

CHAPITRE 5 Hbergement virtuel

Le Chapitre 11 traite de plusieurs modules de multitraitement (MPM), comme mod_perchild, qui permettent d'excuter diffrents htes virtuels sous divers identifiants utilisateur.

Fichiers de conguration par rpertoire


AccessFilename .htaccess

L'hbergement de plusieurs sites Web pose un problme li, relatif aux services d'hbergement qui concernent plusieurs clients. Si le nombre de clients est important, il est possible de faire appel des fichiers de configuration par rpertoire. Ce sont gnralement des fichiers htaccess (auparavant principalement utiliss pour les tches de contrle d'accs). Lorsque cette fonctionnalit est active, Apache recherche des fichiers de configuration spciaux dans tous les rpertoires menant au fichier demand. Par exemple, si Apache reoit une requte pour /usr/local/ apache2/htdocs/index.html, il recherche les fichiers de configuration par rpertoire 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 dmarrage. Cela est assez pratique pour l'administrateur systme, car les utilisateurs peuvent grer eux-mmes leurs configurations. De plus, puisque les fichiers sont analyss la vole, le serveur n'a pas tre redmarr aprs chaque modification. Inconvnient : cette opration pnalise les performances. En effet, Apache doit procder des oprations lourdes sur disque pour rechercher ces fichiers dans chaque requte, et ce, mme si les fichiers n'existent pas.

Utilisation de SSL avec des htes virtuels bass sur le nom

99

La directive AccessFilename permet de fournir une liste de noms de fichiers qu'Apache tudiera, la recherche des fichiers de configuration par rpertoire.

Contrle de la porte des chiers de conguration par rpertoire


AllowOverride Indexes Limit AuthConfig

Lorsque .htaccess est prsent dans le champ Context: de la description de la syntaxe de rfrence de la directive, que vous trouverez dans la documentation Apache, cela signifie que la directive peut tre place dans des fichiers de configuration par rpertoire. La directive AllowOverride permet de contrler le type de directives de configuration pouvant apparatre dans des fichiers de configuration par rpertoire. Vous pouvez, par exemple, autoriser les utilisateurs modifier les directives d'indexation de rpertoire, mais pas celles lies une autorisation. Les valeurs possibles sont les suivantes : b Authconfig. Directives d'autorisation. b FileInfo. Directives contrlant les types de documents. b Indexes. Directives contrlant l'indexation du rpertoire. b Limit. Directives de contrle de l'accs l'hte. b Options. Directives contrlant les fonctions spcifiques du rpertoire. b All. Toutes les directives appartenant aux groupes mentionns prcdemment peuvent tre employes. b None. Dsactiver les fichiers de configuration par rpertoire pour cette arborescence de rpertoires.

100

CHAPITRE 5 Hbergement virtuel

Dsactivation des chiers de conguration par rpertoire


<Directory /> AllowOverride None </Directory>

Si vous n'avez pas l'utilit des fichiers de configuration par rpertoire, vous pouvez les dsactiver l'aide de la syntaxe prsente ici. Cela augmentera la scurit et les performances du serveur, aux dpens toutefois de la flexibilit et de la commodit que ces fichiers procurent.

6
Scurit et contrle d'accs
Le contrle d'accs, une exigence ?
Le contrle d'accs est une exigence pour de nombreux sites Web. Cela implique qu'un certain contenu (ou certaines zones) du site Web soit accessible aux clients provenant d'une plage d'adresses particulire, d'une part, et que ceux-ci fournissent, par exemple, un nom d'utilisateur et un mot de passe valables, d'autre part. Le contrle d'accs peut tre implment divers niveaux : notamment celui du systme d'exploitation, avec des rgles de filtrage des paquets, et celui de l'application Web, avec des formulaires, des sessions et des cookies. Ce chapitre traite exclusivement de l'implmentation du contrle d'accs, de l'authentification et de l'autorisation l'aide des modules Apache intgrs. Il explique galement en quoi les diffrents paramtres de configuration peuvent affecter la scurit de votre serveur et montre plusieurs tapes que vous pouvez entreprendre pour l'amliorer.

102

CHAPITRE 6 Scurit et contrle d'accs

Apache propose plusieurs modules permettant de contrler l'accs au contenu d'un site. Les deux principaux sont mod_access (qui permet de contrler l'accs en fonction de l'adresse IP d'origine et d'autres caractristiques de la requte) et mod_auth (qui authentifie les utilisateurs en fonction d'un nom d'utilisateur et d'un mot de passe). D'autres modules, moins utiliss, seront galement mentionns dans ce chapitre, mais ne seront pas traits en dtail.

Diffrences existant entre les versions d'Apache


La structure des autorisations et des authentifications d'Apache a t totalement remanie dans Apache 2.2. Mme si la plupart des modifications ont t apportes au niveau du code source, plusieurs changements sont visibles pour l'utilisateur. Pour des raisons de clart, et parce que la plupart des concepts de base continuent de s'appliquer, ce chapitre dcrit principalement les configurations Apache 1.3 et Apache 2.0. Toutefois, si vous souhaitez connatre les changements spcifiques la version 2.2, consultez la section "Apache 2.2", plus loin dans ce chapitre.

L'authentication basique et digest


L'authentification des utilisateurs d'un site Web sert pour des raisons de suivi ou d'autorisation. La spcification HTTP propose deux mcanismes d'authentification : basique et digest.

L'authentification basique et digest

103

Dans les deux cas, le processus est le suivant : 1. Un client tente d'accder un contenu protg sur le serveur Web. 2. Apache examine si le client fournit un nom d'utilisateur 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 rponse et demande l'utilisateur son nom et son mot de passe (gnralement dans une fentre contextuelle). 4. Le client tente nouveau d'accder la page Web, cette fois en transmettant le nom d'utilisateur et le mot de passe dans le cadre de la requte HTTP. Le client retient le nom d'utilisateur et le mot de passe et les transmet dans les prochaines requtes vers le mme site, pour que l'utilisateur n'ait pas besoin de les saisir chaque requte. 5. Apache vrifie la validit des informations, puis accorde ou refuse l'accs selon l'identit de l'utilisateur et d'autres rgles d'accs. Dans l'authentification de base, le nom d'utilisateur et le mot de passe sont transmis en texte clair, dans le cadre des en-ttes de la requte HTTP. Cette situation implique un risque pour la scurit. En effet, une personne malveillante pourrait facilement espionner la conversation entre le serveur et le navigateur, intercepter le nom d'utilisateur et le mot de passe, et les rutiliser librement par la suite. L'authentification digest assure un niveau de scurit suprieur, car elle ne transmet qu'un rsum (digest), et non le mot de passe en clair. Un algorithme digest est une opration mathmatique qui extrait un texte et en renvoie un autre qui identifie uniquement le texte d'origine.

104

CHAPITRE 6 Scurit et contrle d'accs

Si le texte change, le digest change galement. Le digest est fond sur une combinaison de plusieurs paramtres, comme le nom d'utilisateur, le mot de passe et la mthode de requte. Le serveur peut calculer le digest lui-mme et vrifier que le client connat le mot de passe, mme quand celui-ci n'est pas transmis sur le rseau. Malheureusement, mme si cette spcification existe depuis un certain temps, les navigateurs n'acceptent pas tous l'authentification digest ou le font de manire non compatible. Dans tous les cas, la fois pour l'authentification basique ou digest, les informations demandes sont transmises sans protection sur le rseau. Pour mieux scuriser l'accs votre site Web, utilisez plutt SSL (voir Chapitre 7).

Prsentation du contrle d'accs Apache


<Directory /usr/local/apache2/htdocs/private> Order Allow, Deny Allow from 192.168.0 exemple.com Deny from guest-terminal.exemple.com </Directory>

L'exemple montre un extrait de configuration utilisant un contrle d'accs bas sur le nom d'hte et IP, avec mod_access. Les directives Allow prcisent les adresses IP individuelles, les rseaux et les noms d'htes qui ont accs au contenu. Les directives Deny prcisent celles qui seront refuses. La directive Order indique la mthode d'valuation des directives Allow et Deny. Dans cet exemple, la directive Order Allow,Deny prcise que les directives Allow doivent tre values en premier, et les directives Deny en dernier. Cet ordre est important !

Configuration des autorisations et des authentifications Apache

105

Order Allow,Deny s'assure que si le client ne correspond pas une directive Allow, l'accs lui sera refus par dfaut. Le fonctionnement du contrle d'accs peut vous laisser perplexe. Ne vous inquitez pas, il est trs facile matriser une fois que vous avez compris comment sont values les directives.

Conguration des autorisations et des authentications Apache


<Directory /usr/local/apache2/htdocs/private> AuthType Basic AuthName "Password Protected Area" AuthUserFile /usr/local/apache2/conf/htusers Require user admin </Directory>

Ce listing prsente un extrait de configuration qui protge un rpertoire l'aide d'un mot de passe. AuthType dfinit le type d'authentification : dans ce cas, c'est une authentification HTTP basique. AuthName associe un texte la zone qui sera protge par le mot de passe. Ce texte sera prsent l'utilisateur lorsque le navigateur lui demandera un mot de passe (gnralement dans une fentre contextuelle spare). AuthUserFile pointe vers la base de donnes utilisateur. Enfin, la directive Require spcifie un utilisateur auquel sera accord un accs en cas d'authentification russie. Les sections suivantes donnent plus de dtails sur cet exemple. Vous y trouverez galement des instructions pour crer et manipuler la base de donnes utilisateur, et d'autres pour combiner un contrle d'accs bas sur l'utilisateur et sur IP, comme indiqu la section "Combinaison des mthodes de contrle d'accs".

106

CHAPITRE 6 Scurit et contrle d'accs

Cration d'une base de donnes utilisateur


htpasswd -c file userid

Pour crer une base de donnes utilisateur (aussi appele fichier de mots de passe), vous pouvez employer l'utilitaire htpasswd inclus dans Apache. La syntaxe permettant de crer un nouveau fichier de mots de passe et d'y ajouter un utilisateur sous UNIX est prsente 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 donnes des utilisateurs. Ne conservez pas le fichier de mots de passe dans un rpertoire accessible par le Web. N'utilisez pas non plus -c lorsque vous ajoutez des utilisateurs un fichier existant ; cela dtruirait le contenu prcdent. A titre d'exemple, la ligne suivante cre un fichier de mots de passe nomm htusers et ajoute un utilisateur nomm admin :
htpasswd -c /usr/local/apache2/conf/htusers admin

Emploi de Require pour autoriser des utilisateurs et des groupes

107

Emploi de Require pour autoriser des utilisateurs et des groupes


<Directory /usr/local/apache2/htdocs/private> AuthType Basic AuthName "Password Protected Area" AuthUserFile /usr/local/apache2/conf/htusers AuthGroupFile /usr/local/apache2/conf/groups Require group administrators </Directory>

Vous pouvez demander Apache d'autoriser l'accs tout utilisateur valide dans la base de donnes, qui s'identifie avec succs, en tapant :
Require valid-user

S'il ne s'agit que d'un certain groupe d'utilisateurs, vous pouvez les rpertorier de manire explicite dans les arguments de Require :
Require user idutil1 idutil2

En revanche, si vous disposez d'un grand nombre d'utilisateurs, employez la directive AuthGroupFile. Elle pointe vers un fichier contenant des informations de groupe, au format suivant :
nomgroupe: idutil1 idutil2 idutil3 [..]

Par exemple :
administrators: admin patron users: admin patron util1 util2

L'exemple affich au dbut de cette section montre un extrait de configuration qui offre l'accs aux seuls utilisateurs ayant russi s'authentifier et appartenant au groupe administrators. Dans cet exemple, il s'agirait des utilisateurs admin et patron.

108

CHAPITRE 6 Scurit et contrle d'accs

Gestion d'un grand nombre d'utilisateurs


<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>

Le module mod_auth_dbm quivaut, en termes de fonctionnalits, mod_auth, mais il conserve les donnes utilisateur dans une base de donnes fonde sur un fichier. Cela acclre la recherche des donnes lorsqu'il existe un grand nombre d'utilisateurs. Ce module propose plusieurs directives, comme AuthDBMAuthoritative, AuthDBMUserFile et AuthDBMGroupFile, dont la syntaxe et les fonctionnalits sont quivalentes aux directives en texte brut prvues 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 donnes de groupe et d'utilisateur peuvent tre stockes dans la mme base de donnes, comme indiqu ici.

Autorisation d'accs des adresses IP spciques uniquement


<Directory /usr/local/apache2/htdocs/private> Order Allow, Deny Allow from 192.168.0 </Directory>

Il est quelquefois souhaitable de limiter l'accs un certain contenu (comme le site Web interne d'une entreprise) des adresses IP spcifiques, notamment celles provenant

Refuser l'accs des adresses IP spcifiques

109

d'un rseau interne. Cet exemple donne accs au rpertoire /usr/local/apache2/htdocs/private et ses sous-rpertoires 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 littralement correspondre au chemin du systme de fichiers qu'utilise Apache pour accder aux fichiers. La ligne Order Allow, Deny refuse l'accs par dfaut ; seuls les clients correspondant la directive Allow se verront accorder l'accs. La directive Allow peut accepter plusieurs adresses IP individuelles ou une certaine plage d'adresses IP. Consultez la rfrence de la directive pour en savoir plus. Vous pouvez galement autoriser l'accs quelques adresses IP spcifiques seulement, qui utilisent le mme code, dans un fichier .htaccess, l'adresse /usr/local/apache2/ htdocs/private :
Order Allow,Deny Allow from 192.168.0

Refuser l'accs des adresses IP spciques


<Directory /usr/local/apache2/htdocs/private> Order Deny,Allow Deny from 192.168.0.2 192.168.0.5 </Directory>

A l'inverse, il est possible d'autoriser un accs gnral, mais avec des restrictions. Vous pouvez, par exemple, refuser l'accs lorsque la requte provient d'une adresse figurant dans une plage d'adresses IP spcifiques. Cela peut servir bloquer certaines machines ou robots Web responsables de problmes ou d'abus de bande passante.

110

CHAPITRE 6 Scurit et contrle d'accs

Cet exemple autorise l'accs au rpertoire /usr/local/ apache2/htdocs/private et ses sous-rpertoires n'importe quelle personne, l'exception des clients dont les adresses IP portent les numros 192.168.0.2 et 192.168.0.5.
Allow et Deny peuvent galement restreindre l'accs selon

qu'il existe ou non une variable d'environnement, comme expliqu la section "Restriction d'accs fonde sur le type du navigateur", plus loin dans ce chapitre. Le Chapitre 9 propose d'autres manires de restreindre ou de limiter l'accs aux clients dont le comportement est inadapt.

Combinaison des mthodes de contrle d'accs


<Location /restricted> Allow from 192.168.200.0/255.255.255.0 AuthType Basic AuthUserFile /usr/local/apache2/conf/htusers AuthName "Ressource restreinte" AuthAuthoritative on Require valid-user Satisfy any </Location>

Vous pouvez associer diffrentes mthodes de contrle d'accs, l'aide de la directive Satisfy. Par exemple, le fichier de configuration montr ici ncessite que les utilisateurs proviennent d'une adresse interne autorise OU qu'ils fournissent un nom d'utilisateur et un mot de passe valables. Pour limiter l'accs aux utilisateurs provenant d'une adresse interne spcifique ET fournissant un nom d'utilisateur et un mot de passe, vous devrez utiliser Satisfy all.

Personnalisation de la page de refus d'accs

111

Personnalisation de la page de refus d'accs


Lorsqu'une requte reoit un refus d'accs du serveur Web, l'utilisateur obtient un message d'erreur gnr par le serveur et cod en dur. Vous pouvez personnaliser ce message, l'aide de la directive ErrorDocument, de trois manires diffrentes. Vous pouvez afficher un message personnalis l'attention de l'utilisateur, comme dans les exemples suivants : Avec Apache 2 :
ErrorDocument 403 "Vous n'tes pas autoris accder ce fichier"

Avec Apache 1.3 (remarquez ici l'absence de guillemets en fin de chane) :


ErrorDocument 403 "Vous n'tes pas autoris accder ce fichier

Vous pouvez galement rediriger la requte vers un chemin 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 commenant par une barre oblique (/), relativement la valeur spcifie dans la directive DocumentRoot. Enfin, vous pouvez rediriger la requte vers une URL externe :
ErrorDocument 404 http://www.exemple.com/page _not_found.html

112

CHAPITRE 6 Scurit et contrle d'accs

Ces exemples font rfrence des codes de retour 400 HTTP diffrents, ce qui indique qu'une erreur a t rencontre lors de la rsolution de la requte (par exemple, l'utilisateur n'a pas fourni le nom et le mot de passe corrects). Vous pouvez bien sr procder de la mme manire pour d'autres codes HTTP communs, comme des erreurs de serveur interne.
Info Certaines versions de Microsoft Internet Explorer (MSIE) ignorent par dfaut les messages d'erreur gnrs par le serveur lorsqu'ils font moins de 512 octets. N'oubliez donc pas de spcifier un message suprieur cette valeur. Vous en saurez plus sur ce problme en vous rfrant un article de la base de connaissances de Microsoft, l'adresse http://support.microsoft.com/ default.aspx?scid=kb;en-us;Q294807.

Donner le pouvoir aux utilisateurs


Si plusieurs utilisateurs publient du contenu dans votre installation Apache, vous pouvez les autoriser protger leur propre rpertoire par mot de passe, l'aide de fichiers .htaccess (voir Chapitre 1). Ce mcanisme porte prjudice aux performances, mais il vous vite de donner l'accs aux fichiers de configuration Apache ou aux bases de donnes utilisateur, ou encore de les mettre jour chaque fois qu'un changement est ncessaire. Dans les sections de rpertoire appropries de votre fichier de configuration Apache, vous devrez ajouter :
AllowOverride AuthConfig Limit

L'instruction permet aux utilisateurs de crer leurs propres fichiers de configuration .htaccess et de placer leurs propres contrles d'accs et directives lies aux autorisations.

Refus d'accs aux fichiers systme et sensibles

113

A l'inverse, vous pouvez interdire les changements de configuration par rpertoire, grce au paramtre global suivant :
<Directory /> AllowOverride none </Directory>

Cela prsente comme autre avantage d'amliorer les performances. En effet, Apache n'a pas besoin de rechercher l'existence de fichiers de configuration par rpertoire pour chaque fichier demand. Vous pouvez galement restreindre le type d'options de configuration autorises. Pour en savoir plus, consultez la documentation sur AllowOverride.

Refus d'accs aux chiers systme et sensibles


<Files ~ "^\.ht"> Order allow,deny Deny from all </Files>

Il existe certains types de fichiers auxquels les visiteurs ne doivent pas avoir accs, quelles que soient les circonstances, car ils peuvent contenir des mots de passe ou d'autres informations sensibles. Ce sont les fichiers de sauvegarde d'exemple crs par les diteurs de texte UNIX, les fichiers de configuration par rpertoire, etc. Vous pouvez en refuser l'accs l'aide de paramtres de configuration explicites (tels que ceux prsents ici), inclus par dfaut dans la configuration Apache, et refuser l'accs aux fichiers .htaccess et .htpasswd.

114

CHAPITRE 6 Scurit et contrle d'accs

Il est galement possible d'empcher le serveur de desservir un certain contenu en le configurant de manire 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 dsactiver mod_spelling (voir Chapitre 4). En effet, ce module peut quelquefois exposer "par inadvertance" des noms de fichiers non destins tre publis, comme cela peut tre le cas si une URL mal orthographie correspond plusieurs documents. Consultez galement la section relative la restriction d'accs aux listings de rpertoires, plus loin dans ce chapitre.

Restriction d'excution de programmes


Les programmes CGI peuvent prsenter un risque pour la scurit. Il est conseill de dsactiver leur excution, ou du moins de la restreindre des rpertoires spcifiques. Pour cela, n'utilisez pas les directives AddHandler pour activer globalement l'excution CGI de certaines extensions de fichiers. De mme, mod_include autorise l'excution de CGI et de commandes externes l'aide de SSI. Ils sont dsactivs par dfaut par la directive Options -IncludesNoExec. Si possible, vrifiez que les rpertoires contenant des scripts CGI inscriptibles par le superutilisateur uniquement, et notamment pas par l'utilisateur sous lequel Apache s'excute. Sur le mme thme, assurez-vous chaque fois que possible que l'arborescence de documents soit en lecture seule.

Eviter les abus

115

Cela empchera une personne malveillante de crer un fichier pouvant ensuite tre excut (par exemple, un fichier contenant du code PHP qui serait introduit dans un serveur activ pour PHP). De mme, n'oubliez pas de protger les rpertoires activs 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 abus


Il existe plusieurs manires de restreindre ou de limiter l'accs tout ou partie de votre site Web. Cela peut tre ncessaire, par exemple, pour protger un contenu des moteurs de recherche ou lorsqu'un robot au comportement indlicat consomme trop de ressources. Ces mthodes sont expliques en dtail au Chapitre 9, qui traite aussi de la manire d'viter ou de rduire les attaques de refus de service. Ces attaques ont pour but d'empcher le serveur de rpondre aux requtes des utilisateurs, ou de le limiter. Plusieurs modules et paramtres Apache aident rsoudre ces problmes en partie.

Dsactivation des listings de rpertoire


<Directory /usr/local/apache2/htdocs/private> Options -Indexes </Directory>

Apache permet de dfinir des fichiers d'index spciaux, avec la directive DirectoryIndex. Lorsqu'une requte ralise par un client correspond un chemin de rpertoire,

116

CHAPITRE 6 Scurit et contrle d'accs

Apache recherche l'un de ces fichiers d'index (gnralement nomms index.html ou accueil.html) et le renvoie au navigateur. Si aucun fichier n'est trouv, Apache renvoie une page HTML contenant un listing de rpertoire. Mme si cela peut tre utile au cours du dveloppement ou lors de la mise disposition d'un rfrentiel de fichiers, il est possible que des noms de fichiers que vous ne souhaitez pas voir publier ni indexer par des moteurs de recherche (comme les fichiers de sauvegarde) le soient. Vous pouvez dsactiver les listings de rpertoire en dsactivant le module mod_autoindex ou en utilisant la directive Options, comme indiqu ici. Si les fichiers de configuration par rpertoire sont activs, vous pouvez galement placer l'exemple dans un fichier .htaccess.

Modication de l'en-tte Server:


ServerTokens Prod

Apache renvoie un en-tte Server: avec chaque requte. Par dfaut, cet en-tte contient des informations sur le nom du serveur, sa version et sa plate-forme. D'autres modules prsents dans le serveur, comme SSL, PHP ou mod_perl, peuvent ajouter des entres supplmentaires la chane de serveurs contenant le nom et la version du module. Sachez que vous pouvez aussi modifier ou restreindre les informations d'en-tte du serveur, l'aide de la directive ServerTokens. Nous recommandons sans cesse de rduire la quantit d'informations concernant la configuration du serveur, qui sont vues par le monde extrieur. Toutefois, modifier la chane du serveur n'apportera que peu de

Empcher le vol de vos images (hotlinking)

117

scurit supplmentaire. En effet, la plupart des outils d'analyse et d'attaque automatiss ignorent ces informations ; ils recherchent les scripts et les modules vulnrables les uns aprs les autres, quels que soient la version et le module signals.

Empcher le vol de vos images (hotlinking)


RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(www\.)?exemple\.com/ [NC] RewriteCond %{HTTP_REFERER} ^http:// [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule \.(jpg|jpeg|gif|png|bmp)$ - [F]

Il arrive que des personnes se connectent directement depuis leur site Web des ressources prsentes sur votre serveur, comme des images, des logos ou des fichiers de programmes binaires. Par exemple, un commerant 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 (socits de cartes de crdit, pays...). Ce phnomne, appel hotlinking (vol de bande passante), peut tre contr. Vous pouvez empcher que des utilisateurs ne se connectent vos images en exigeant que ce type de requte provienne de votre serveur. Vous y parviendrez l'aide de mod_rewrite. L'exemple de ce listing renverra une rponse Forbidden toute requte ralise sur les fichiers image (identifis par leurs extensions la quatrime ligne RewriteRule) dont l'en-tte HTTP_REFERER ne correspond pas votre nom de domaine (premire ligne RewriteCond). En outre,

118

CHAPITRE 6 Scurit et contrle d'accs

certains navigateurs ne pouvant pas envoyer de champ de rfrence valide (voire aucun), d'autres vrifications sont ralises pour voir si le champ de rfrence commence par http:// et s'il n'est pas vide (deuxime et troisime lignes RewriteCond).

Restriction de mthodes HTTP spciques


<Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> </Directory>

Vous pouvez contrler l'accs votre serveur en fonction de la mthode HTTP de la requte, l'aide des directives <Limit> et <LimitExcept>. Cet exemple (extrait du fichier de configuration Apache par dfaut) montre comment autoriser des mthodes en lecture seule et refuser des requtes pour toute autre mthode susceptible de modifier le contenu du systme de fichiers, comme PUT. La section <Directory> identifie les rpertoires par utilisateur qui peuvent contenir des pages Web (voir Chapitre 8). Les deux lignes suivantes restreignent les paramtres de configuration pouvant tre modifis par les utilisateurs, ainsi que d'autres paramtres de scurit. La section <Limit> permet l'accs par dfaut aux mthodes HTTP

Restriction d'accs base sur le type du navigateur

119

qui sont en lecture seule, comme GET et POST. La section <LimitExcept> fait le contraire : elle refuse l'accs toute autre mthode, sans avoir explicitement les numrer. Cela est particulirement utile pour autoriser vos utilisateurs administrer leur propre contenu (voir Chapitre 8).

Restriction d'accs base sur le type du navigateur


SetEnvIf User-Agent ^EvilSearchEngine broken_crawler <Directory /usr/local/apache2/htdocs> Order Deny,Allow Deny from env=broken_crawler </Directory>

Vous pouvez restreindre l'accs en fonction du type du navigateur ou de toute autre information d'en-tte ou proprit de connexion, grce aux variables d'environnement, avec Allow et Deny. Dans ce cas, l'accs sera refus pour les navigateurs disposant d'un en-tte User-Agent commenant par EvilSearchingEngine, et tous les autres seront autoriss. Cela s'accomplit l'aide de la directive SetEnvIf pour dfinir de manire conditionnelle une variable d'environnement, nomme broken_crawler, si l'en-tte User-Agent de la requte (premier argument) correspond une expression rgulire donne (second argument). Plus tard, vous pourrez appliquer de manire conditionnelle les directives Deny et Allow en fonction de l'existence de cette variable d'environnement, identifie par un prfixe env=. N'oubliez pas que, mme si cette technique fonctionne le plus souvent, les en-ttes tant envoys par le client, ils ne peuvent donc pas tre totalement fiables.

120

CHAPITRE 6 Scurit et contrle d'accs

Utilisation des sections d'emplacement et de rpertoire


La directive Order contrle l'ordre de traitement des directives d'accs, 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 value aprs une directive Allow (ou Deny) apparaissant dans une section <Directory> ou un fichier .htaccess, quel que soit le paramtre de la directive Order. Prenez en compte que les liens symboliques et les directives Alias peuvent affecter le paramtrage de l'authentification. Les restrictions peuvent ainsi tre contournes si les directives de contrle d'accs sont places dans une section <Location>, mais le contenu est aussi accessible par le biais de mappages d'URL supplmentaires.

Autres modules d'authentication


Outre les principaux modules proposant un contrle d'accs 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 accs utilisateur "anonyme" de style FTP aux zones de tlchargement de fichiers. b mod_auth_ldap. Ce module, disponible dans Apache 2 et versions ultrieures, permet d'authentifier les utilisateurs par rapport un rpertoire LDAP. b mod_ssl. Ce module permet d'utiliser une authentification du client base sur un certificat (voir Chapitre 7).

Autres modules d'authentification

121

L'un des avantages d'Apache rside dans le fait que c'est un systme modulaire et extensible. Plusieurs modules tiers ont t dvelopps pour lui permettre de s'interfacer avec des structures d'authentification existantes (comme les domaines Windows, LDAP, PAM et NIS) et des informations utilisateur stockes dans une srie de bases de donnes (MySQL, PostgreSQL, Oracle et autres). Vous en saurez plus sur ces modules en visitant les adresses http://modules.apache.org et http://freshmeat.net. L'authentification peut aussi tre gre au niveau de l'application. On demande gnralement le nom d'utilisateur et le mot de passe dans un formulaire Web. Aprs validation, un cookie est affect ; il authentifie l'utilisateur pour le reste de la session. C'est ainsi que les sites de portail et de commerce lectronique grent gnralement les fonctions de personnalisation.

mod_security
Ce module mrite une mention spciale. C'est, par essence, un pare-feu de niveau HTTP. Il vous permet d'inspecter les requtes HTTP et de raliser toutes sortes d'oprations de surveillance, de reporting et de contrle d'accs. Il peut dtecter et bloquer des attaques communes au niveau de l'application, notamment celles impliquant une injection SQL et une vulnrabilit de type chemin transversal. Vous en saurez plus sur ce module en vous rendant l'adresse http://www.modsecurity.org.

122

CHAPITRE 6 Scurit et contrle d'accs

Apache 2.2
<Location /combined> AuthType Basic AuthName "Restricted Access" AuthBasicProvider file ldap AuthUserFile /usr/local/apache2/conf/htusers AuthLDAPURL ldap://exemple.com/o=Sample Require valid-user </Location>

Apache 2.2 intgre des modifications significatives dans la mise en place de l'authentification et de l'autorisation. Ces changements font principalement rfrence au travail qui a t ralis dans les modules existants pour sparer clairement les mthodes (authentifications de base et digest) et les fournisseurs (fichiers, arrire-guichets LDAP ou SQL, par exemple). Avant cela, les deux fonctions taient mlanges dans chaque implmentation de module. Par exemple, mod_authn_file implmente l'authentification par rapport aux fichiers texte et mod_authn_dbm ralise l'authentification par rapport aux fichiers de base de donnes. Ils peuvent tre associs mod_auth_basic et mod_auth _digest qui implmentent leur tour des authentifications HTTP de base et digest. D'autres modules propose des fonctionnalits d'autorisation pour les utilisateurs en fonction de donnes stockes dans des bases de donnes ou en fonction de fichiers LDAP ou SQL, et d'autres bass sur la proprit des fichiers ou les adresses IP d'origine. Les fournisseurs peuvent tre mlangs, comme indiqu dans l'exemple au dbut de cette section. Un nouveau module, mod_authn_alias, permet de dfinir des configurations d'authentification complexes pouvant tre rfrences par leur nom partout ailleurs dans le fichier de configuration. Cela permet, par exemple, d'authentifier la mme ressource sur deux serveurs LDAP diffrents.

Mise jour de la scurit Apache

123

Mise jour de la scurit Apache


Comme avec tous les autres logiciels de serveur, vous devez vous informer sur les nouvelles versions d'Apache, en vous tenant au fait des problmes de scurit, mais galement des correctifs ou des "contournements" qui existent pour y remdier. Ces URL vous aideront dans cette tche : b Liste de diffusion des annonces Apache : http://httpd.apache.org/lists.hml b Problmes de scurit Apache : http://httpd.apache.org/security_report.html b La semaine Apache : http://www.apacheweek.com b Conseils sur la scurit Apache : http://httpd.apache.org/docs-2.0/misc/ security_tips.html

Liste de contrle de scurit


On dit souvent que la scurit est un processus, et non une fonction. Pour que votre installation reste scurise, vous devez suivre les "conseils de scurit sur Apache" et surveiller les journaux d'accs et d'erreurs. Etant donn qu'Apache s'excute en symbiose avec son environnement, procdez de mme pour le systme d'exploitation et les applications. En fait, la plupart des problmes exploitables distance avec Apache naissent au niveau de l'application : wiki vulnrable, bibliothques PHP, composants, etc. Cela dit, vous trouverez ici une liste dtaille de mesures entreprendre pour scuriser une installation Apache par dfaut.

124

CHAPITRE 6 Scurit et contrle d'accs

Dsactiver les modules inutiles


La premire tape consiste dsactiver tous les modules que vous n'utilisez pas. Si vous avez compil Apache avec une prise en charge de modules chargeables, vous pouvez transformer en commentaires les directives qui chargent des modules spcifiques. Vous devrez peut-tre procder de mme pour d'autres directives prsentes dans le fichier de configuration et faisant rfrence au module dsactiv. Voici une courte liste des premiers modules retirer si vous ne les utilisez pas, peu prs dans leur ordre d'importance : b PHP, mod_python, mod_mono, mod_perl et tous les autres modules de langage ct serveur. Bien sr, ne dsactivez PHP que si vous n'utilisez pas Apache pour excuter 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 scuriser les communications entre le navigateur et Apache. b mod_proxy, qui, s'il est mal configur, peut permettre aux personnes extrieures d'utiliser votre serveur pour relayer des requtes. b mod_deflate, un filtre Apache 2 pour compresser la sortie la vole. b mod_suexec, employ pour excuter des programmes externes sous des identifiants utilisateur diffrents de celui sous lequel s'excute Apache. b mod_userdir, qui permet aux utilisateurs des systmes UNIX d'hberger leurs propres pages. b mod_rewrite, qui autorise un mappage arbitraire et la rcriture des URL entrantes.

Suppression des chantillons de script

125

De plus, dans Apache 1.3, vous pouvez dsactiver explicitement des modules compils spcifiques, en utilisant la directive ClearModuleList, puis en activant explicitement des modules, l'aide de la directive AddModule.

Suppression des chantillons de script


La plupart des logiciels et des environnements de dveloppement ct serveur Web proposent des exemples d'applications et de scripts des fins de dmonstration ou de test. Mme s'ils sont utiles, ces exemples ne sont gnralement pas cods en tenant compte de la scurit. Ils peuvent donc tre vulnrables plusieurs attaques, la plupart lies au fait que le programme n'efface pas correctement la saisie de l'utilisateur. Ces inconvnients permettent souvent un dlinquant d'excuter des commandes systme arbitraires, affichant le contenu des autres fichiers, ou de modifier la base de donnes. N'oubliez pas de supprimer tous les exemples de scripts et les comptes de dmonstration livrs avec vos serveurs d'application, ainsi que votre environnement de dveloppement et autres logiciels bass sur le Web que vous pourriez avoir installs.

Restreindre ou dsactiver l'excution de CGI et de SSI


Si la prise en charge des scripts CGI ne vous concerne pas, dsactivez mod_cgi. Dans le cas contraire, limitez la capacit excuter des scripts des rpertoires spcifiques.

126

CHAPITRE 6 Scurit et contrle d'accs

Par exemple, vous pouvez analyser votre configuration la recherche des directives ScriptAlias et Options avec les arguments ExecCGI et vous assurer qu'elles sont correctement configures. Vrifiez que des tiers ne peuvent pas crire dans les rpertoires marqus comme contenant des scripts excutables. Vous pouvez galement envisager d'utiliser l'enveloppe CGI suExec comprise avec Apache. Le mme raisonnement peut s'appliquer la fonctionnalit SSI, prvue par mod_include, qui permet l'excution de commandes externes, moins qu'elle ne soit dsactive par Options -IncludesNoExec.

Vrier les autorisations de chiers


Sous UNIX, Apache est gnralement dmarr partir de la racine. Il effectue un certain nombre d'oprations, par exemple la liaison au port appropri, puis change d'identifiant utilisateur pour celui spcifi dans la directive User. Puisque certaines oprations sont ralises partir de la racine, il faut s'assurer que les fichiers journal et de configuration, ainsi que les rpertoires qui les contiennent, ne sont pas inscriptibles par d'autres. Assurez-vous que les rpertoires marqus comme contenant des scripts excutables ou qui peuvent contenir des scripts PHP ne sont ni inscriptibles par tous, ni accessibles par FTP ou WebDAV, par exemple.

Limiter ou dsactiver la fonctionnalit de proxy

127

Limiter ou dsactiver la fonctionnalit de proxy


Comme avec les CGI, vous devez dsactiver ou restreindre la prise en charge des proxy dans votre installation Apache, faute de quoi un proxy ouvert pourrait servir lancer des attaques cibles sur d'autres sites, voire relayer du spam. Si vous excutez Apache sous forme de proxy inverse, vous pouvez dsactiver le proxy "ordinaire", ou classique, avec ProxyRequests off.

Restreindre l'accs votre serveur par dfaut


Le serveur doit tre configur de manire refuser l'accs par dfaut aux documents qu'il contient, moins que l'accs ne soit explicitement activ. L'extrait de configuration suivant, tir de la documentation Apache, montre comment procder :
<Directory /> Order Deny,Allow Deny from all </Directory> <Directory /usr/local/apache2/htdocs> Order Deny,Allow Allow from all </Directory>

Consultez les sections prcdentes pour savoir comment dsactiver les listings de rpertoires.

7
SSL et TLS
Ce chapitre propose une brve introduction aux concepts qui sous-tendent SSL. Il se prsente comme un guide dtaill pour l'installation et la configuration du module Apache mod_ssl. Vous verrez comment rsoudre les problmes communs lis SSL. D'autre part, vous apprendrez crer, signer et installer vos cls et certificats de serveur.

Dnition de SSL
La famille de protocoles SSL/TLS (Secure Sockets Layer/ Transport Layer Security) sert scuriser les communications entre deux points d'extrmit, gnralement un serveur et un client. Lorsqu'un navigateur accde un serveur Web l'aide du protocole HTTP, les donnes sont transmises de manire ouverte. Un tiers capable d'intercepter cette conversation un point du rseau pourra accder aux donnes transmises, voire les modifier. Plusieurs applications, notamment celles destines aux paiements lectroniques sur le Web, ainsi que l'accs des informations d'entreprise sensibles ncessitent un niveau de scurit qui n'est pas disponible avec le protocole HTTP.

130

CHAPITRE 7 SSL et TLS

Le protocole HTTPS, ou HTTP scuris, a t dvelopp pour rpondre ces proccupations. Il amliore la scurit du protocole HTTP en apportant : b La confidentialit. Il crypte les donnes de sorte qu'elles ne soient pas lisibles par des tiers. b L'intgrit. Il s'assure que les donnes n'ont pas t modifies pendant leur transit. b L'authentification. Il vrifie 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 dfaut du protocole HTTPS est 443 ; les URL HTTPS sont prfixes par https://. Vous le savez probablement dj, la plupart des navigateurs proposent des indices visuels, gnralement sous la forme d'un cadenas plac prs de la barre d'adresses, lorsque vous tes connect un site utilisant le protocole HTTPS.

Fonctionnement de SSL
Lorsqu'un utilisateur tape https://www.exemple.com, le navigateur reconnat le prfixe https:// et emploie donc le protocole HTTPS pour se connecter au serveur. Si aucun port n'est spcifi, c'est le port HTTPS par dfaut (443) qui est utilis. Lorsqu'une connexion est tablie, le client demande le certificat du serveur. Un certificat est une donne lectronique qui dcrit l'identit d'un point d'extrmit dans la communication SSL (voir plus loin). La validit du certificat est alors teste.

Compilation d'OpenSSL

131

Si le processus de validation russit, 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 ncessaire, du client) tablie, l'tape suivante consiste convenir d'une cl de cryptage commune. Dans ce but, les cls publiques de chaque partie sont utilises dans un algorithme pour s'accorder en toute scurit sur une cl symtrique. Plus loin dans ce chapitre, vous en apprendrez davantage sur les cls de cryptage et la manire de les gnrer. Le processus d'accord est scuris contre les espions. En effet, lorsque vous cryptez des informations avec la cl publique du serveur, seul le serveur peut les dcrypter. Enfin, le client et le serveur peuvent procder l'change ordinaire d'informations. Ici, la plupart des navigateurs proposent l'utilisateur des indices visuels (gnralement un cadenas ferm) montrant que la connexion est scurise.

Compilation d'OpenSSL
# gunzip < openssl*.tar.gz | tar xvf # cd openssl* # ./config --prefix=/usr/local/ssl -openssldir=/usr/local/ssl/openssl # make # make install
mod_ssl est le module Apache qui implmente HTTPS. Le projet OpenSSL propose les bibliothques cryptographiques de base employes par mod_ssl, ainsi que des utilitaires de ligne de commande pour crer et manipuler des certificats de serveur.

132

CHAPITRE 7 SSL et TLS

Vous pouvez tlcharger une version du binaire Windows, dans la section des binaires du site Web OpenSSL, l'adresse http://www.openssl.org. La plupart des systmes modernes de type UNIX incluent OpenSSL par dfaut, mais vous pouvez galement utiliser les outils de gestion de packages systme. Si ce n'est pas le cas ou que vous ayez besoin d'une version plus rcente que celle disponible sur votre systme, tlchargez le source OpenSSL et installez-le comme indiqu au dbut de cette section. Dans la suite de ce chapitre, nous supposerons que vous avez install OpenSSL dans le rpertoire /usr/local/ssl. L'outil de ligne de commande openssl figure dans la distribution OpenSSL. Il sera plac dans /usr/local/ssl/bin/.

Cls de cryptage
Le cryptage est un processus qui consiste convertir un message existant, en texte brut, en un nouveau message totalement inintelligible pour un espion. Le dcryptage correspond au processus inverse : il transforme le message crypt en texte brut original. Gnralement, le processus de cryptage et de dcryptage ncessite d'autres informations, savoir une cl. Si l'expditeur et le destinataire partagent la mme cl, le processus est appel cryptographie symtrique. Si l'expditeur et le destinataire possdent des cls diffrentes et complmentaires, on parle alors de cryptographie asymtrique ou cryptographie de cl publique. La cryptographie de cl publique implique une paire de cls, dont l'une est publique et l'autre prive. La cl publique peut tre mise librement disposition, tandis que le propritaire conserve la cl secrte prive. Ces deux cls sont complmentaires ; un message crypt avec l'une des cls ne peut tre dcrypt qu'avec l'autre.

Cration d'une paire de cls

133

Cration d'une paire de cls


# ./usr/local/ssl/bin/openssl genrsa -rand fichier1:fichier2:fichier3 \ -out www.exemple.com.key 1024 625152 semi-random bytes loaded Generating RSA private key, 1024 bit long modulus .....++++++ .........................++++++ e is 65537 (0x10001)

L'exemple montre comment crer une paire de cls en utilisant l'outil de ligne de commande openssl.
genrsa indique OpenSSL que vous souhaitez gnrer

une paire de cls l'aide de l'algorithme RSA. Le commutateur rand sert fournir OpenSSL des donnes alatoires pour s'assurer que les cls gnres sont uniques et impossibles deviner. Remplacez ensuite fichier1, fichier2, etc. par le chemin menant plusieurs grands fichiers, relativement alatoires (image de kernel, fichiers journaux compresss, etc.). Ce commutateur n'est pas ncessaire sous Windows, car les donnes alatoires sont automatiquement gnres par d'autres moyens. Le commutateur out indique o conserver les rsultats.
1024 signale le nombre de bits de la cl gnre.

Cration d'une paire de cls protges par mot de passe


# ./usr/local/ssl/bin/openssl genrsa des3 -rand fichier1:fichier2:fichier3 \ -out www.exemple.com.key 1024

134

CHAPITRE 7 SSL et TLS

Ici, l'option des3 indique que la cl prive doit tre crypte et protge par un mot de passe qui vous sera demand ds que vous souhaiterez lancer le serveur, comme indiqu la section "SSLPassPhraseDialog".

Suppression du mot de passe d'une cl


# ./usr/local/ssl/bin/openssl rsa -in www.exemple.com.key \ -out www.exemple.com.key.unsecure

Vous pouvez choisir d'ter la protection de la cl en mettant cette commande. Cela prsentant certains risques pour la scurit, veuillez consulter la section "SSLPassPhraseDialog".

Certicats
La cryptographie par cl publique peut servir signer des messages numriquement. Si, par exemple, vous cryptez un message avec une cl secrte, le destinataire peut tre assur qu'il provient de vous en le dcryptant simplement avec la cl publique. Il manque toutefois une tape. Comment, en effet, pouvez-vous authentifier des correspondants que vous n'avez jamais rencontrs en personne ? Autrement dit, comment pouvez-vous vrifier qui appartient rellement 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 socit ou une universit, ou encore tre un organisme commercial

Cration d'une requte de signature de certificat

135

proposant des services de certification aux entreprises qui ralisent des transactions sur Internet. Une CA dlivre des certificats, savoir des documents lectroniques qui lient une cl publique particulire des informations concernant son propritaire, par exemple un nom et une adresse. Les certificats sont signs numriquement avec la cl prive de la CA, ce qui garantit que les informations sont correctes. Pour que l'ensemble de ce processus fonctionne, vous devez faire confiance l'autorit qui a dlivr le certificat. Vous devez aussi pouvoir obtenir la cl publique pour cette autorit particulire, fournie par son certificat racine. La plupart des grands navigateurs, comme Internet Explorer, Firefox et Safari, contiennent plusieurs certificats racine, provenant des autorits de certification les plus courantes. Cela permet aux navigateurs de reconnatre et de valider un grand nombre de sites Web sans que l'utilisateur n'ait intervenir.

Cration d'une requte de signature de certicat


# ./usr/local/ssl/bin/openssl req -new -key www.exemple.com.key -out www.exemple.com.csr

Pour obtenir un certificat dlivr par une autorit, vous devez d'abord soumettre ce que l'on appelle une requte de signature de certificat. Comme expliqu prcdemment, la requte contient des donnes sur l'organisme qui demande le certificat et la cl publique. Cette commande cre une requte de ce type. Sachez qu'il faudra fournir plusieurs informations, comme indiqu au Listing 7.1.

136

CHAPITRE 7 SSL et TLS

Listing 7.1 Utilisation d'openssl pour gnrer une requte de certicat

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 a Distinguished 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 []:administrator@exemple.com 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'entre de champ "Common Name" correspond l'adresse que taperont les visiteurs de votre site Web dans leur navigateur. C'est l'une des vrifications ralises par le navigateur pour le certificat de serveur distant. Si le nom diffre, un avertissement est affich pour l'utilisateur, prcisant l'absence de concordance.

Affichage du contenu d'une requte de signature de certificat

137

Vous pouvez maintenant soumettre les fichiers de requte de signature du certificat une autorit de certification, des fins de traitement. Le processus varie selon les organismes. Vous trouverez une liste complte des autorits de certification l'adresse http://www.pki-page.org/. VeriSign, Thawte, GeoTrust et Equifax sont les plus connues, mais il existe aussi d'autres autorits communautaires, comme Cacert (http://www.cacert.org/).

Afchage du contenu d'une requte de signature de certicat


# ./usr/local/ssl/bin/openssl req -noout \ -text -in www.exemple.com.csr

Les requtes de signature de certificat sont conserves dans un formulaire spcial et compact. Cette commande affiche le contenu du certificat conserv l'adresse www.exemple.com.csr dans un format lisible. Comme indiqu prcdemment dans ce chapitre, le certificat contient des informations sur l'entit qui le demande, le contenu de la cl publique et une signature cre avec la cl prive.

Cration d'un certicat autosign


Outre soumettre votre demande de signature de certificat une CA commerciale, vous pouvez toujours crer un certificat autosign, c'est--dire tre la fois l'metteur et l'objet du certificat. Mme si cela n'est pas trs utile pour un site Web commercial, l'opration permet de tester

138

CHAPITRE 7 SSL et TLS

votre installation de mod_ssl ou de disposer d'un serveur Web scuris, 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/. Protgez votre fichier de cls en mettant la commande suivante :
# chmod 400 www.exemple.com.key

Compilation de la prise en charge SSL dans Apache 1.3


$ 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
mod_ssl est un module trs populaire qui assure la prise en charge SSL la fois pour Apache 1.3 et 2.x. Pour des raisons historiques lies aux restrictions d'exportation sur la cryptographie, la version Apache 1.3 est distribue sparment du serveur. De plus, le code source d'Apache 1.3 doit tre corrig pour prendre en charge mod_ssl.

Compilation de la prise en charge SSL dans Apache 1.3

139

Cela est ralis dans le cadre du processus de construction mod_ssl, prsent au Listing 7.1. L'exemple construit Apache 1.3.33 et mod_ssl 2.8.23 et suppose que les deux rpertoires source sont situs au mme niveau. L'option de ligne de commande --with-apache pointe vers l'emplacement du rpertoire du source Apache 1.3, qui est ensuite recompil pour inclure la prise en charge mod_ssl. Si vous laborez votre installation par rapport une bibliothque OpenSSL systme, vous pouvez supprimer SSL_BASE=/usr/local/ssl/ de l'tape de configuration d'Apache. Si Apache contient dj les correctifs EAPI et la prise en charge de modules chargeables, vous pouvez enfin utiliser le mcanisme de construction APXS commun (voir Chapitre 1). Il est utile, par exemple, pour mettre niveau une installation mod_ssl existante.
Attention Si vous tentez de lancer Apache maintenant, vous obtiendrez un message d'erreur indiquant qu'il est impossible de lire le certificat du serveur. Consultez les sections prcdentes pour savoir comment crer votre certificat et vos cls de serveur et la section "Configuration minimale d'Apache", plus loin dans ce chapitre, pour savoir comment dmarrer votre serveur. En option, mod_ssl peut crer un certificat de serveur des fins de test lors du processus de construction. Pour cela, lancez un make certificate avant make install.

140

CHAPITRE 7 SSL et TLS

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


Apache 2 tant sorti aprs les rglementations d'exportation amricaines sur la cryptographie, il propose mod_ssl en complment 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.

Conguration minimale d'Apache


Une fois les cls et certificats gnrs, qu'ils soient autosigns ou certifis par un tiers, vous allez configurer Apache. Dans le cadre du processus d'installation, mod_ssl cre une configuration SSL d'exemple. Apache 1.3 l'ajoute au fichier httpd.conf par dfaut ; quant Apache 2.0, il comprend un fichier ssl.conf spar, rfrenc par une directive Include dans httpd.conf. Il existe un grand nombre d'options de configuration, ce qui peut tre droutant. En ralit, seules quelques-unes vous seront ncessaires 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>

Dmarrage d'Apache avec prise en charge SSL

141

L'une des directives Listen indique Apache d'couter sur le port HTTPS par dfaut, 443. SSLEngine On active SSL pour cet hte particulier. Les directives SSLCertificateFile et SSLCertificateKeyFile pointent vers le certificat et la cl prive.

Dmarrage d'Apache avec prise en charge SSL


Une fois mod_ssl install et configur, vous pouvez lancer Apache avec :
apachectl start

Si vous utilisez des fichiers de configuration SSL par dfaut (ou ceux fournis par votre vendeur), les directives SSL seront probablement entoures d'un bloc <IfDefine SSL>. Vous pouvez, soit retirer ces blocs, soit dmarrer Apache avec :
apachectl startssl

Cela transfre la balise -DSSL au binaire du serveur et active la configuration SSL.


Attention Cela ne doit tre ralis que dans Apache 1.3 et 2.0. En effet, Apache 2.2 n'intgrant plus l'option startssl, les directives SSL ne sont plus considres diffremment des autres.

Si vous avez protg votre cl prive par un mot de passe, indiquez-le maintenant. Si vous avez install Apache en tant qu'utilisateur ordinaire, il est possible qu'il ait t configur pour couter par dfaut sur le port 8443.

142

CHAPITRE 7 SSL et TLS

Comme expliqu au Chapitre 2, le port 443 est un port privilges et il n'est accessible que par le superutilisateur. Vous pouvez tester l'installation en accdant au serveur, l'adresse https://www.exemple.com (ou https://www.exemple.com:8443, nous venons de l'expliquer).

SSLPassPhraseDialog
SSLPassPhraseDialog builtin

Si vous avez protg votre cl prive du serveur par mot de passe, vous devrez le saisir au moment du dmarrage. Vous pouvez contrler ce comportement avec SSLPassPhraseDialog. Sa valeur par dfaut, builtin, signifie qu'Apache demandera le mot de passe directement, chaque dmarrage du serveur. Vous pouvez aussi choisir de ne pas protger la cl (notamment pour des raisons de commodit ; vous n'aurez ainsi pas besoin de saisir manuellement le mot de passe chaque redmarrage). Attention, cependant ! Dans ce cas, si le serveur rencontre un problme, il en ira de mme pour la cl. Vous pouvez galement configurer SSLPassPhraseDialog pour appeler un programme externe, qui fournira le mot de passe sur son entre standard lorsqu'il sera appel par Apache. Avec un script correctement rdig, vous obtenez davantage de scurit que si vous laissiez la cl sans protection (mais pas beaucoup plus).

Amlioration des performances SSL

143

Amlioration des performances SSL


Les algorithmes impliqus dans SSL sont gourmands en unit centrale et peuvent considrablement ralentir le serveur, en particulier en cas de connexions client simultanes. La phase d'change d'informations peut galement retarder la requte. Plusieurs options peuvent cependant amliorer la capacit de rponse d'un site. Vrifiez de bien avoir activ la mise en cache de la session. Cela acclre les situations o il existe plusieurs connexions partir du mme client. En cas de grappe de serveurs SSL, utilisez distcache, de sorte que les donnes de connexion puissent tre mises en cache mme si le client se connecte plusieurs serveurs dans la grappe. Apache 2.2 assure la prise en charge du distcache ds 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 ddie, rserve au traitement SSL. Selon vos besoins, il peut s'agir d'un quilibreur de charge commercial (lment matriel) ou d'une machine ddie excutant un proxy inverse (un serveur Web qui se fie des requtes vers d'autres serveurs Web au nom du client). Cela permet d'apporter des amliorations dans la configuration d'Apache et du systme d'exploitation qui ne seraient pas possibles si la machine servait galement d'autres objectifs, comme l'excution de PHP, de Tomcat et de MySQL. Un proxy inverse peut offrir des avantages supplmentaires, comme l'quilibrage des charges et la connexion unique, avec possibilit d'utiliser des certificats client, sur plusieurs sites Web d'arrire-guichet. Consultez le Chapitre 10 pour en savoir plus.

144

CHAPITRE 7 SSL et TLS

Enfin, vous pouvez installer une carte de cryptographie, un matriel conu pour dcharger 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 desservi par SSL


<VirtualHost 192.168.200.4:80> ServerName private.exemple.com Redirect / https://private.exemple.com/ </Virtualhost>

Si vous disposez d'un site Web particulier qui ne doit tre desservi que par SSL, vous pouvez utiliser un Redirect dans une section <VirtualHost> qui coute les requtes HTTP et les redirige vers un site Web scuris (comme indiqu dans l'exemple). L'opration est utile, car les utilisateurs oublient parfois de taper https:// au lieu de http://.

SSL et htes virtuels SSL bass sur le nom


Une question revient souvent chez les utilisateurs de mod_ssl : "Est-il possible de disposer de plusieurs htes virtuels bass sur le nom et activs par SSL ?" La rponse est non. Le problme est que l'hbergement virtuel bas sur le nom repose sur des informations fournies par le client dans l'en-tte Host: de la requte HTTP, puisque tous les htes virtuels bass sur le nom partagent la mme adresse IP.

Utilisation des modules Auth d'Apache avec SSL

145

Toutefois, la connexion SSL a lieu au niveau TCP, avant que la requte HTTP ne puisse tre envoye. Le serveur n'est donc pas capable de dterminer, au moment de la connexion, l'hte virtuel auquel le client veut se connecter et donc le certificat et la cl utiliser. A noter qu'il existe une spcification (RFC 2817) qui autorise la mise niveau d'une connexion HTTP existante vers HTTPS. Cela permet de contourner le problme mais, l'heure o nous crivons ces lignes, elle n'est implmente par aucun grand navigateur. Le module mod_ssl d'Apache 2.2 implmente 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


SSLOptions +FakeBasicAuth

Lorsque cette option est active, 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 mthodes d'authentification Apache standard (voir Chapitre 6) peuvent tre utilises pour le contrle d'accs. Ces modules d'authentification "croient" que l'utilisateur a fourni un nom et un mot de passe valables. Vous devrez modifier certains paramtres dans vos bases de donnes utilisateur.

146

CHAPITRE 7 SSL et TLS

Messages d'avertissement lors de l'accs un site Web activ par SSL


Parfois, lors de l'accs un site Web activ par SSL, les utilisateurs voient s'afficher une fentre contextuelle d'avertissement indiquant que quelque chose ne va pas avec le site Web. Voici quelques-unes des causes les plus frquentes : b Le certificat a expir. Les certificats commerciaux sont gnralement valables pendant une priode donne, aprs quoi ils expirent. b Le domaine du certificat ne correspond pas au domaine du serveur. Cela survient si le certificat a t dlivr pour un site Web diffrent. b Le certificat a t sign par une autorit de certification 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.

Cration de certicats client


Lorsque vous utilisez l'autorisation de certificat client, le serveur vrifie, lors de la phase d'change de donnes, que le client prsente un certificat valide et que ce dernier a t sign par une autorit de confiance. Mme si cela est lourd grer et distribuer, les certificats client protgent l'accs aux sites ou aux services Web de la socit. Ils sont souvent davantage scuriss que les noms d'utilisateur et les mots de passe, car ils ne peuvent tre ni devins ni intercepts. Pour devenir votre propre autorit de certification, la premire tape consiste crer une CA racine. Pour cela, utilisez l'argument ca de l'outil de ligne de commande ou bien le script d'enveloppe CA.pl, intgr avec openssl.

Authentification l'aide des certificats client

147

Pour crer une nouvelle autorit de certification, vous pouvez mettre la commande suivante :
CA.pl -newca

Le script gnre alors une cl prive, un certificat de serveur, etc., ainsi qu'une structure de rpertoires qui contient les fichiers gnrs. Vous pouvez maintenant crer une demande de signature de certificat (CSR) et signer votre certificat avec :
CA.pl -newreq CA.pl -signreq

Le fichier de CA gnr aura le format PEM. Pour le convertir dans un format autre qui le rende plus commode importer dans les navigateurs, excutez la commande suivante :
CA.pl -pkcs12

La mthode exacte pour importer le certificat vers la machine de l'utilisateur final varie selon le type du navigateur. Les utilisateurs d'Internet Explorer n'ont qu' cliquer sur le fichier de certificat et suivre les instructions.

Authentication l'aide des certicats client


SSLVerifyClient require SSLCACertificateFile \ /usr/local/ssl/openssl/certs/ca.crt

Une fois que vous avez install des certificats dans vos clients, vous devez demander Apache d'activer la validation SSL pour les clients. Cette directive SSLVerifyClient exige des clients qu'ils fournissent un certificat valide pour

148

CHAPITRE 7 SSL et TLS

pouvoir se connecter. SSLCACertificateFile fournit le chemin vers le fichier contenant le certificat CA de confiance qui servira vrifier 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 socits commerciales, comme IBM, disposent de leurs propres modules SSL, inclus dans leurs packages de serveur Web bass sur Apache, et utilisant gnralement des botes outils autres que OpenSSL. Enfin, vous pouvez choisir un utilitaire indpendant, comme stunnel (http://www.stunnel.org), pour placer en proxy les connexions SSL un serveur Apache existant. Mme s'il n'est pas aussi flexible que mod_ssl, il peut tre pratique pour certains scnarios lorsqu'il n'est pas possible ni souhaitable de modifier une configuration de serveur en fonctionnement.

Test de sites Web activs par SSL partir de la ligne de commande


# openssl s_client -connect www.ibm.com:443

Vous pouvez utiliser openssl ou d'autres outils bass sur SSL, comme stunnel (http://www.stunnel.org), pour tester des serveurs Web scuriss. Il est notamment possible d'employer cette commande pour vous connecter au site Web d'IBM l'aide de HTTPS. Vous obtiendrez des

Contourner les implmentations SSL prsentant des bogues

149

dtails sur le protocole SSL et le certificat de serveur pour la connexion. Vous pouvez galement mettre une commande GET / HTTP/1.0 et appuyer sur Entre pour obtenir une rponse, comme si vous aviez utilis Telnet pour vous connecter un serveur Web ordinaire sur le port 80 pour mettre des requtes HTTP manuellement (voir Chapitre 1).

Contourner les implmentations SSL prsentant des bogues


SetEnvIf User-Agent ".*MSIE.*" nokeepalive \ ssl-unclean-shutdown downgrade-1.0 \ force-response-1.0

Certains navigateurs (ou serveurs, s'ils oprent dans une configuration de proxy inverse) prsentent des problmes connus avec des versions spcifiques du protocole SSL ou de certaines fonctions. Certaines variables d'environnement peuvent tre rgles pour forcer des comportements spcifiques. Cela est particulirement utile si vous disposez d'un site commercial et que vous deviez prendre en charge des navigateurs plus anciens. Ainsi, l'extrait prsent ici, qui figure dans le fichier de configuration par dfaut, contourne les bogues de l'implmentation SSL des navigateurs Internet Explorer. Si le navigateur client contient la chane MSIE, la prise en charge de maintien en activit (keep-alive) sera mise en service, pour porter son choix sur une prcdente version du protocole HTTP.

150

CHAPITRE 7 SSL et TLS

Contrle d'accs complexe avec mod_ssl


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]+$/

Cet exemple montre comment utiliser la directive SSLRequire pour implmenter les restrictions d'accs arbitraires fondes sur plusieurs paramtres. Comme cela arrive avec mod_rewrite, SSLRequire peut tre complexe configurer, mais il offre des possibilits quasi illimites. L'extrait de configuration qui prcde vrifie que : b La connexion SSL n'utilise pas un chiffrage d'exportation (faible) ou un chiffrage NULL, que le certificat a t mis par une CA particulire et pour un groupe particulier et que l'accs 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 rseau interne, de confiance (comme indiqu par REMOTE_ADDR). Veuillez vous reporter la documentation de SSLRequire pour plus d'informations.

Chapitres annexes
Si vous utilisez Apache comme proxy inverse, sachez que les informations relatives au certificat et aux connexions lies SSL pour les clients ne sont pas disponibles pour les serveurs d'arrire-guichet. Vous apprendrez rsoudre ce problme au Chapitre 10.

8
Publication de contenu avec DAV
Apache et la publication de contenu
Si vous proposez des services d'hbergement d'autres utilisateurs, il faut leur fournir une mthode 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 grer leur contenu. Nous donnons ici des explications sur les mthodes qui restreignent l'accs en criture des ressources particulires, sur la manire de configurer diffrents clients (y compris des dossiers Web de Windows), ainsi que sur certains des problmes les plus frquents. Vous trouverez galement des informations sur la faon d'activer des rpertoires par utilisateur, de sorte que chaque utilisateur dispose de son propre espace sur le Web.

152

CHAPITRE 8 Publication de contenu avec DAV

Prsentation 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 apprcier la fabuleuse avance procure par WebDAV, il est ncessaire de comprendre les limitations des prcdentes mthodes de publication. Aux premiers temps du Web, les Webmestres et les administrateurs systme ditaient le contenu d'un serveur directement partir de la coque (shell) en utilisant des diteurs de texte, comme vi ou emacs. A mesure que le Web a grandi, diffrents postes sont apparus : les administrateurs entretenaient le serveur et les utilisateurs et les programmeurs fournissaient le contenu. Des mcanismes taient ncessaires aux utilisateurs pour envoyer et modifier leur contenu. Or, cette sparation des tches ncessitait des rgles de restriction d'accs et des mthodes simples utiliser pour des non-techniciens. Les moyens permettant de gnrer un contenu Web sont passs de simples diteurs de texte des outils de publication sophistiqus, plus proches des traitements de texte en termes de fonctionnalits et de simplicit d'utilisation. Malheureusement, il n'existait pas de mthode standard permettant aux uns comme aux autres de charger du contenu. Les solutions taient diverses : autoriser les utilisateurs accder la coque du systme, ou bien employer le protocole FTP ou d'autres protocoles propritaires. L'accs la coque exige que vos utilisateurs connaissent les bases de la ligne de commande UNIX. Cela entrane des complexits et des problmes de scurit lis l'autorisation de l'accs direct au serveur. L'emploi d'un client FTP exige, d'une part que les utilisateurs tlchargent et installent un outil supplmentaire, d'autre part qu'un serveur FTP soit install. Enfin, les scripts personnaliss, le chargement

Avantages de l'utilisation de mod_dav

153

des fichiers par l'intermdiaire de formulaires HTML et les protocoles propritaires (notamment ceux utiliss par Microsoft FrontPage) soulvent plusieurs problmes de fonctionnement crois et de scurit. WebDAV permet de contourner ces problmes en proposant un protocole standard qui peut tre implment dans le cadre du serveur Web. WebDAV prolonge le protocole HTTP avec de nouvelles mthodes pour permettre, entre autres, la cration, la suppression et le verrouillage de ressources des fins d'dition. WebDAV est implment dans Apache avec mod_dav, qui est distribu sous forme de module tiers pour Apache 1.3 et sous forme de module intgr pour Apache 2.0.

Avantages de l'utilisation de mod_dav


Nous l'avons vu la section prcdente, mod_dav est implment sous forme de module Apache qui prolonge le protocole HTTP. Il peut profiter de plusieurs fonctions intgres d'Apache, comme SSL pour le cryptage et l'authentification base sur le certificat, l'authentification de base HTTP, les serveurs proxy, etc. L'intgration dans Apache offre de nombreuses autres possibilits, comme le partage des mcanismes de contrle d'accs et l'interaction avec les moteurs de script, comme mod_perl et PHP. Le protocole DAV lui-mme est extensible. Mme si les ressources accessibles par DAV rsident gnralement dans le systme de fichiers, DAV peut agir comme un frontal fond sur les normes pour toute une srie de rfrentiels d'arrire-guichet (comme les bases de donnes, les systmes de contrle des versions et les structures de gestion documentaire propritaires).

154

CHAPITRE 8 Publication de contenu avec DAV

Par exemple, DAV intgre le concept des collections ( savoir des groupes de fichiers), qui permet gnralement d'oprer un transfert vers un rpertoire du serveur. Attention, cependant, cela peut prendre une signification totalement diffrente pour d'autres systmes d'arrire-guichet. Enfin, WebDAV a t implment par la plupart des structures de publication Web modernes, les suites Office et les environnements de bureau.

WebDAV et le protocole HTTP


DAV est implment au-dessus du protocole HTTP standard qui permet aux navigateurs et aux serveurs Web de communiquer. Il prolonge les mthodes HTTP existantes et en inclut de nouvelles, comme indiqu ici. Ces informations vous seront ncessaires pour implmenter le contrle d'accs et crire sur des ressources actives pour DAV : b COPY. Copie des fichiers ou des collections (l'quivalent des rpertoires du systme de fichiers). Des en-ttes supplmentaires permettent de spcifier la copie rcursive de collections imbriques. b MOVE. Dplace des fichiers et des collections. b MKCOL. Cre une nouvelle collection. Si les collections parentes n'existent pas, une erreur est renvoye. Les collections parentes doivent tre explicitement cres l'aide de la mthode PUT. b PROPFIND. Nous avons vu prcdemment que les ressources DAV pouvaient tre associes des informations de mtadonnes. La mthode PROPFIND permet d'interroger ces mtadonnes.

Installation de mod_dav sous Apache 2.0

155

b PROPPATCH. Cette mthode permet de supprimer, de crer et de modifier des mtadonnes de ressources. b LOCK et UNLOCK. Ces mthodes permettent de verrouiller une ressource. Elles servent, par exemple, viter qu'une ressource ne soit modifie alors que vous l'ditez. Le protocole DAV prolonge les mthodes HTTP existantes, comme GET et PUT, principalement pour les avertir des nouvelles fonctions de verrouillage. La mthode OPTIONS est prolonge pour rapporter les capacits DAV.

Installation de mod_dav sous Apache 2.0


./configure --enable-dav

Apache 2.0 inclut mod_dav, mme s'il n'est pas activ par dfaut. Vous pouvez l'activer comme vous le feriez avec n'importe lequel des autres modules intgrs. Par dfaut, il compile galement l'arrire-guichet du systme de fichiers (--enable-dav-fs). Il est galement possible de disposer d'autres arrire-guichets pour DAV, comme le systme de gestion de source et les bases de donnes Subversion. Si vous utilisez la distribution Apache 2 Windows, sachez que mod_dav y figure dj 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

156

CHAPITRE 8 Publication de contenu avec DAV

Installation de mod_dav sous Apache 1.3


tar xvfz mod_dav-1.0.3-1.3.6.tar.gz cd mod_dav-1.0.3-1.3.6 ./configure --with-apxs=/usr/local/apache/bin/apxs make make install

Apache 1.3 ne dispose pas d'une prise en charge intgre de DAV. Il vous faut tlcharger et installer mod_dav, comme vous le feriez avec n'importe quel autre module tiers (voir l'extrait de configuration). Vous pouvez tlcharger le code source UNIX et les binaires Windows aux adresses http://www.webdav.org/mod_dav/ et http://www.webdav.org/mod_dav/win32/.

Conguration WebDAV de base


DAVLockDB /usr/local/apache/var/DAVLock <Location /> Dav On

La configuration de DAV est trs simple. Il suffit de faire figurer DAV on l'emplacement (ou dans la section de rpertoire) qui doit tre accessible par DAV. L'exemple montre comment activer DAV sur un site Web. DAV possde son propre mcanisme de verrouillage et ne repose pas sur la fonctionnalit du systme de fichiers sous-jacent. A noter qu'il est possible de prciser l'emplacement du fichier de verrouillage DAV, grce la directive DAVLockDB. Il existe toutefois d'autres aspects de la configuration DAV qui doivent tre traits dans un environnement DAV de production. Ils concernent la scurit et le fonctionnement crois avec des clients tiers contenant des bogues. Ces questions seront traites aux sections suivantes.

Scurisation de votre configuration WebDAV

157

Scurisation de votre conguration WebDAV


<LimitExcept GET HEAD OPTIONS> require user davuser </LimitExcept>

Par dfaut, l'activation de DAV prsente un risque grave pour la scurit. 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'utilisateur et des mots de passe sensibles). Il est donc ncessaire de protger l'accs aux ressources actives par DAV. DAV tant plac au-dessus du HTTP, cette procdure peut tre accomplie l'aide de modules de contrle d'accs Apache standard. L'exemple montre comment exiger un mot de passe et un nom d'utilisateur valides pour accder en criture une ressource DAV, comme MKCOL. L'opration est ralise l'aide de mod_auth (voir Chapitre 6) et de la directive <LimitExcept>.
Listing 8.1 : Protection de l'accs DAV

<Location /> Dav On AuthType basic AuthName "DAV Resource" AuthUserFile /usr/local/apache2/conf/htusers <LimitExcept GET HEAD OPTIONS> require user davuser </LimitExcept> </Location>

158

CHAPITRE 8 Publication de contenu avec DAV

<Limit> et <LimitExcept> sont deux directives de sections permettant d'appliquer des paramtres de configuration donns certaines mthodes de requte spcifiques. Mme si elles ne sont pas trs utiles pour du HTTP ordinaire, elles peuvent servir pour des configurations DAV. L'exemple permet tout le monde d'accder au contenu Web en employant des mthodes HTTP pures, mais restreint l'accs DAV aux seuls utilisateurs autoriss.

Il existe d'autres mesures, comme l'excution de DAV sur une instance spare et usage unique d'Apache. Ce serveur Apache peut s'excuter sur un port spar, et tre facilement divis et scuris. Vous pouvez galement le configurer pour qu'il exige un contrle d'accs bas sur SSL ou IP, et ce afin d'obtenir une protection supplmentaire.

Accs aux ressources DAV depuis Microsoft Ofce


Les versions rcentes de Microsoft Office (comme Office 2000 et Office XP) permettent d'ouvrir et d'diter des documents partir des serveurs activs par DAV, notamment dans des versions rcentes d'Exchange. Il suffit de spcifier l'URL d'un emplacement activ par DAV dans la bote de dialogue Ouvrir de l'application, ou d'utiliser la bote de dialogue d'ajout d'un nouvel emplacement rseau (voir Figure 8.1). Une fois fait, vous pourrez facilement crer, modifier et partager des documents sur le serveur distant.

Accs aux ressources DAV depuis Microsoft Windows

159

Figure 8.1 Ajout d'un favori rseau sous Microsoft Office.

Accs aux ressources DAV depuis Microsoft Windows


Les versions rcentes des systmes 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 accs transparent aux serveurs activs par DAV en les prsentant sous forme de dossiers du Bureau Windows. Les utilisateurs de Windows peuvent alors faire glisser les fichiers vers ces dossiers, double-cliquer pour les modifier, etc. Il est galement possible d'accder une ressource DAV sous forme de dossier Web sur une machine Windows 2000, directement depuis Explorer ou en utilisant un assistant.

160

CHAPITRE 8 Publication de contenu avec DAV

Dans la suite de cette section, nous supposerons qu'un serveur Apache dessert le domaine www.exemple.com avec une prise en charge DAV active sous la section /davdocs du site. Assurez-vous que la directive RedirectCarefully approprie soit en place (voir, plus loin, la section "Gestion des clients prsentant des bogues"). Ouvrez une fentre Internet Explorer. Cliquez sur le menu Fichier et slectionnez Ouvrir. Une fentre contextuelle s'affiche (voir Figure 8.2).

Figure 8.2 Ouverture d'une ressource DAV depuis Explorer.

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 crer des rpertoires, faire glisser des fichiers et les modifier (voir Figure 8.3). L'emplacement est automatiquement ajout au dossier Favoris rseau. Vous pouvez y accder en cliquant sur l'icne de Bureau portant ce nom. Vous pouvez galement ajouter un dossier Web l'aide d'un assistant. Pour cela, accdez d'abord au dossier Favoris rseau mentionn la section prcdente, cliquez sur l'icne Ajouter un favori rseau, puis suivez les instructions l'cran.

Accs aux ressources DAV depuis Firefox

161

Figure 8.3 Vue d'une ressource DAV.

Accs aux ressources DAV depuis Firefox


A l'heure o nous crivons ces lignes, Firefox n'assure aucune prise en charge native pour accder aux ressources DAV. Toutefois, l'extension openwebfolder (sous Windows uniquement) permet de se connecter au composant Microsoft Windows WebDAV, ce qui procure l'accs 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 redmarr Firefox, cliquez du bouton droit sur

162

CHAPITRE 8 Publication de contenu avec DAV

n'importe quelle page, puis slectionnez "Open as Web Folder" dans le menu contextuel pour y accder par le biais de WebDAV (voir Figure 8.4).

Figure 8.4 Ouverture d'un dossier Web depuis Firefox.

Accs DAV depuis la ligne de commande


./cadaver dav:!> open http://exemple.com

Plusieurs clients la ligne de commande sont disponibles pour accder aux ressources actives par DAV, ce qui simplifie l'interactivit et l'intgration dans des scripts administratifs. Ils peuvent servir de remplacements pour leurs contreparties 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.

Accs DAV depuis la ligne de commande

163

L'exemple montre comment utiliser cadaver pour accder un serveur Web activ par DAV, rpertorier les ressources disponibles et modifier un fichier distant :
./cadaver dav:!> open http://exemple.com dav:/> ls Listing collection `/': succeeded. Coll: images 0 Dec 7 2004 Coll: 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% of 6232 bytes succeeded. Unlocking `solutions.html': succeeded. dav:/>

cadaver peut tre tlcharg l'adresse http://www. webdav.org/cadaver.

164

CHAPITRE 8 Publication de contenu avec DAV

sitecopy permet de maintenir la synchronisation entre

une arborescence de documents locale et un serveur distant, l'aide de plusieurs protocoles, notamment DAV. Il peut tre tlcharg l'adresse http://www.lyra.org/ sitecopy.

Gestion des clients prsentant des bogues


BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully BrowserMatch "^gnome-vfs" redirect-carefully

Si vous ne parvenez pas vous connecter votre serveur DAV l'aide des dossiers Web de Microsoft ou d'anciennes versions de dossiers virtuels Gnome, et que vous obteniez une mention semblable :
"OPTIONS /davdocs HTTP/1.1" 301

dans votre journal d'accs, c'est que vous avez rencontr un bogue avec certaines implmentations client de WebDAV. 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 variable d'environnement redirect-carefully est paramtre. Cet exemple (propos dans le fichier de configuration Apache par dfaut) dfinit la variable d'environnement redirect_carefully pour deux clients WebDAV connus pour rencontrer les problmes mentionns.

mod_speling et DAV

165

mod_speling et DAV
Si vous utilisez DAV, vous devrez obligatoirement dsactiver mod_speling. En effet, ce module interfre avec plusieurs oprations lies DAV (comme la cration 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


Alias /php /usr/local/apache/php_files Alias /php-source /usr/local/apache/php_files <Location /php-source> DAV On ForceType text/plain </Location>

Si vous accdez des ressources gnres dynamiquement (comme des pages PHP ou des script CGI), vous risquez de rencontrer ce problme : Apache renvoie ce contenu gnr dynamiquement, et non le code source du fichier. Autrement dit, vous obtenez le contenu du fichier aprs 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 hte virtuel indpendant, sur lesquels la prise en charge de PHP n'est pas active (voir prcdemment). Vous pouvez aussi mettre en correspondance le chemin du systme de fichiers avec diffrentes URL et activer ou dsactiver les modules de manire slective. L'exemple (extrait de la documentation DAV) montre comment procder. On oblige ici tout le contenu desservi par l'URL /php-source adopter le type text/plain, ce qui vite l'excution par le moteur PHP.

166

CHAPITRE 8 Publication de contenu avec DAV

Activation des pages par utilisateur


UserDir enabled UserDir public_html

Avez-vous dj accd une URL du type http://www .exemple.com/~joe ? C'est ce que l'on appelle une "page Web par utilisateur". Chaque utilisateur du systme se voit affecter une URL qui commence par le signe ~, suivi de son nom. Quand Apache trouve une requte de ce type, il la met en concordance avec un chemin spcial dans le rpertoire 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 dsactiver avec les directives de configuration UserDir enabled et UserDir disabled. Vous pouvez galement spcifier une liste supplmentaire de noms d'utilisateurs activer ou dsactiver de manire slective, comme dans UserDir disabled mysql root. Si le premier argument est diffrent de enabled ou disabled, il sert spcifier l'endroit o sont stocks les sites par utilisateur. Par exemple, UserDir public_html fera concorder une requte 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

Autres rpertoires utilisateur

167

Les rpertoires par utilisateur doivent tre lisibles pour l'utilisateur sous lequel Apache s'excute. 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 rpertoires utilisateur


RewriteEngine On RewriteCond %{HTTP_HOST} !^(www\.) RewriteCond %{HTTP_HOST} ^([^.]+)\.exemple\.com RewriteRule ^(.*)$ /home/%1/public_html$1

Si vous ne souhaitez pas activer mod_dir ou que vous ayez besoin d'une fonctionnalit lgrement diffrente de ce qui est propos, vous pouvez envisager d'utiliser mod_vhost _alias ou mod_rewrite. L'exemple montre comment utiliser mod_rewrite pour faire concorder des requtes destines utilisateur.exemple.com au rpertoire HTML par utilisateur qui convient.

168

CHAPITRE 8 Publication de contenu avec DAV

Rsolution des problmes avec DAVLockDB


No such file or directory: A lock database was not specified with the DAVLockDB directive. One must be specified to use the locking functionality. [500,#401]

Si vous rencontrez un message de ce type, cela signifie que vous devez fournir une directive DavLockDB dans le fichier de configuration, comme indiqu :
DAVLockDB /usr/local/apache/var/DAVLock

Si la directive est spcifie mais que le rpertoire contenant 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 rsoudre les autorisations, de sorte que le chemin de la directive DavLockDB possde des autorisations en criture, destines l'utilisateur sous lequel Apache s'excute.

9
Performances et volutivit
Personnalisation d'Apache
Ce chapitre dcrit les options de configuration qui risquent d'affecter les performances et l'volutivit d'Apache et indique la manire de les personnaliser. Heureusement, dans la plupart des cas, cela ne sera pas ncessaire. En effet, la plupart des problmes de vitesse et d'volutivit proviennent gnralement du moteur de gnration de contenu dynamique ou de la couche de la base de donnes, et non du serveur Web Apache lui-mme. A noter que certains des problmes et des solutions traits dans ce chapitre sont suffisamment gnriques pour s'appliquer la plupart des logiciels de serveurs, tandis que d'autres sont spcifiques Apache.

170

CHAPITRE 9 Performances et volutivit

Les performances et l'volutivit


Amliorer les performances et l'volutivit de n'importe quel systme informatique implique un mlange d'exprience, de travail de profilage et de comprhension du fonctionnement interne du serveur. Ce chapitre propose plusieurs suggestions et ides pratiques pour vous aider dmarrer. Pour clarifier les choses, sachez que les performances permettent de rpondre plus rapidement aux requtes, tandis que l'volutivit consiste desservir un grand nombre de requtes simultanment.

Personnalisation du matriel
vmstat

Il est probable que l'action la plus importante qu'il soit possible de raliser pour amliorer les performances d'un serveur consiste augmenter la quantit de RAM. Cette RAM supplmentaire permet au systme d'exploitation de mettre en cache des fichiers disque d'accs frquent, ainsi que de prendre en charge plusieurs enfants Apache s'excutant simultanment. Autre aspect prendre en compte : la vitesse du disque. Des disques rapides englobant de grandes quantits de cache peuvent amliorer considrablement le problme des charges. Vous pouvez galement modifier diffrents paramtres de commande, notamment en activant la prise en charge de Direct Memory Access pour votre lecteur. Sous Linux, faites appel l'utilitaire hdparm.
vmstat est un outil UNIX servant dnicher les goulots

d'tranglement. Cet outil donne des informations sur les procdures, la mmoire, le paging, les entres-sorties de blocs, les piges et l'activit de l'unit centrale.

Elargissement des limites du systme d'exploitation

171

Si vous utilisez SSL sur votre serveur et que vous deviez prendre en charge plusieurs utilisateurs simultans, l'opration peut consommer une grosse partie des ressources de l'unit centrale. Un processeur plus rapide ou une carte de cryptographie ddie vous aideront dans ce cas. Reportez-vous au Chapitre 7 et ("Amlioration des performances SSL"), ainsi qu'au Chapitre 10, pour en savoir plus sur les paramtres appliquer. Enfin, une machine quipe de plusieurs units centrales (ou d'units centrale curs multiples) amliore considrablement l'volutivit des serveurs Web bass sur les processus. Ce type de machine est recommand pour les hbergements de charges moyennes lourdes.

Elargissement des limites du systme d'exploitation


ulimit

Plusieurs facteurs du systme d'exploitation peuvent empcher l'adaptation d'Apache. Ces facteurs sont lis la cration de processus, aux limitations de la mmoire et au nombre simultan maximal de fichiers de connexion ouverts. La commande ulimit d'UNIX permet de fixer plusieurs des limites traites dans les prochaines sections en fonction du processus. Reportez-vous la documentation de votre systme d'exploitation pour plus de dtails sur la syntaxe de ulimit.

172

CHAPITRE 9 Performances et volutivit

Elargissement des limites du systme d'exploitation sur les processus


Apache propose des paramtres pour viter que le nombre de processus et de threads n'excde certaines limites. Ces paramtres affectent l'volutivit, car ils limitent le nombre de connexions simultanes au serveur Web, ce qui rduit ensuite le nombre de visiteurs auxquels vous pouvez rpondre simultanment. Ces paramtres varient selon les MPM (modules multitraitement). Ils sont dcrits en dtail au Chapitre 11. Les paramtres MPM d'Apache sont ensuite contraints par les paramtres du systme d'exploitation, qui restreignent le nombre de processus et de threads. Les tapes ncessaires pour modifier les limites varient selon les systmes d'exploitation. Sous les kernels Linux 2.4 et 2.6, vous pouvez accder la limite est accessible ; elle peut tre paramtre au moment de l'excution, 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 diffrence de la plupart des autres versions d'UNIX), il existe un mappage entre les threads et les processus, analogue pour le systme d'exploitation. Sous Solaris, ces paramtres peuvent tre modifis dans le fichier /etc/system. Ces modifications n'exigent pas de reconstruire le kernel, mais peuvent demander un redmarrage pour prendre effet. Vous pourrez modifier le nombre total

Augmentation des descripteurs de fichiers du systme d'exploitation

173

de processus en modifiant l'entre max_nprocs et le nombre de processus autoriss pour un utilisateur donn, avec maxuproc.

Augmentation des descripteurs de chiers du systme d'exploitation


Ds qu'un processus ouvre un fichier (ou un socket), une structure (appele "descripteur de fichiers") est affecte jusqu' ce que le fichier soit ferm. Le systme d'exploitation limite le nombre de descripteurs de fichiers qu'un processus donn peut ouvrir, ce qui restreint le nombre de connexions simultanes sur le serveur. Le moyen employer pour modifier ces paramtres dpend du systme d'exploitation. Sous Linux, vous pouvez lire ou modifier /proc/sys/fs/file-max (en utilisant echo et cat, comme indiqu la section prcdente). Sous Solaris, vous devez modifier la valeur de rlim_fd_max dans le fichier /etc/system. Ces modifications ncessitent un redmarrage pour prendre effet. Vous trouverez des informations complmentaires l'adresse : http://httpd.apache.org/docs/misc/descriptors.html.

Contrle des processus externes


RlimitCPU RLimitMem RLimitNProc

Apache propose plusieurs directives pour contrler la quantit de ressources utilises par les processus externes.

174

CHAPITRE 9 Performances et volutivit

Cela concerne les scripts CGI engendrs par le serveur et les programmes excuts via SSI. La prise en charge des directives suivantes est disponible uniquement sous UNIX et varie selon les systmes : b RLimitCPU. Accepte deux paramtres, 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 paramtre maximal autoris par le systme d'exploitation. La limite dure est optionnelle. La limite souple peut tre modifie entre les redmarrages. La limite dure prcise la valeur maximale autorise pour ce paramtre. Si cela vous semble confus, consultez le Chapitre 11, qui donne des informations sur ServerLimit et MaxClients. b RLimitMem. La syntaxe est identique RLimitCPU, mais cette directive prcise la quantit (en octets) de mmoire utilise pour chaque processus. b RLimitNProc. La syntaxe est identique RLimitCPU, mais cette directive prcise le nombre de processus. Ces trois directives vitent que des programmes malveillants ou mal crits ne soient hors de contrle.

Amlioration des performances du systme de chiers


L'accs au disque est une opration onreuse en termes de ressources ; c'est l'un des facteurs de ralentissement pour n'importe quel serveur. Si vous rduisez le nombre de fois o Apache (ou le systme d'exploitation) doit lire partir du disque et crire sur le disque, les performances peuvent tre considrablement amliores. Les sections suivantes

Gestion de liens symboliques

175

traitent de certains des paramtres que vous pouvez personnaliser pour y parvenir. En outre, la plupart des systmes d'exploitation modernes prsentent des fonctions trs efficaces de mise en cache du systme de fichiers, laissant ainsi suffisamment de RAM disposition ; ceci peut aussi considrablement amliorer la vitesse d'accs aux fichiers souvent appels.

Montage de systmes de chiers, grce l'option noatime


De nombreux systmes de fichiers Linux peuvent tre monts, grce l'option noatime. Cela signifie que le systme d'exploitation n'enregistre pas le dernier accs un fichier lors de sa lecture, mme s'il conserve la trace de sa dernire criture. L'opration peut considrablement augmenter la vitesse, en particulier pour des serveurs lourdement chargs. La ligne suivante montre un exemple d'entre /etc/fstab :
/dev/hda3 /www ext2 defaults,noatime 1 1

Gestion de liens symboliques


Options FollowSymLinks

Sous UNIX, un lien symbolique (symlink) est un type de fichier spcial qui pointe vers un autre fichier. Il est cr avec la commande ln d'UNIX. Il permet de faire apparatre un fichier donn diffrents endroits.
FollowSymLinks et SymLinksIfOwnerMatch sont deux des paramtres autoriss par la directive Options. Par dfaut, Apache ne suit pas les liens symboliques. En effet, ceux-ci peuvent servir contourner les paramtres de scurit et

176

CHAPITRE 9 Performances et volutivit

offrent un accs indsirable des parties de votre systme de fichiers. Par exemple, vous pouvez crer un lien symbolique, partir d'une partie publique du site Web, vers un fichier (ou un rpertoire) restreint qui ne serait pas autrement accessible par le Web. Ainsi, Apache doit, par dfaut, procder une vrification pour s'assurer que le fichier n'est pas un lien symbolique. Quand SymLinksIfOwnerMatch est prsent, il suit un lien symbolique si le fichier de destination appartient l'utilisateur qui a cr ce lien. Ces tests devant tre raliss pour chaque lment du chemin ainsi que chaque chemin faisant rfrence un objet du systme de fichiers, ils peuvent tre onreux. Si vous contrlez la cration du contenu, ajoutez une directive Options +FollowSymLinks votre configuration et vitez l'argument SymLinksIfOwnerMatch. De cette manire, les tests n'auront pas lieu, et les performances ne seront pas affectes.

Dsactiver les chiers de conguration par rpertoire


<Directory /> AllowOverride none </Directory>

Nous l'avons vu aux prcdents chapitres, les fichiers de configuration par rpertoire offrent une manire commode de configurer le serveur et laissent un certain degr de libert l'administration dlgue. Toutefois, si cette fonction est active, Apache doit rechercher les fichiers dans chaque rpertoire, dans le chemin menant au document desservi. Vous pouvez dsactiver cette fonction en ajoutant AllowOverride votre configuration.

Gestion de liens symboliques

177

Congurer la ngociation du contenu


Nous l'avons vu la section "Configuration de la ngociation du contenu", au Chapitre 4, Apache peut desservir diffrentes versions d'un fichier en fonction de la langue ou des prfrences du client. Cela peut tre accompli avec les extensions de fichiers mais, pour chaque requte, Apache doit accder au systme de fichiers plusieurs reprises, la recherche de fichiers possdant les extensions appropries. Si vous devez utiliser la ngociation du contenu, assurez-vous au moins d'utiliser un fichier de correspondance de type, ce qui rduit les accs au disque.

Dsactiver ou rduire la consignation


BufferedLogs On

Sur les sites Web lourdement chargs, la consignation peut considrablement ralentir le serveur. Vous pouvez rduire son impact en ne consignant pas les accs 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 directive BufferedLogs (comprise dans mod_log_config pour Apache 2 et versions ultrieures). Enfin, vous pouvez dcider d'utiliser des modules comme mod_log_spread qui permettent de consigner sur le rseau plutt que sur un disque local, ce qui amliore les performances. Vous pouvez tlcharger le module mod_log_spread l'adresse http://wwwbackhand.org/mod_log_spread.

178

CHAPITRE 9 Performances et volutivit

Personnalisation du rseau et des paramtres de statut


Plusieurs paramtres Apache lis au rseau peuvent dgrader les performances. Les sections suivantes traitent des plus importants.

HostnameLookups
HostnameLookups off

Quand HostnameLookups est paramtr sur on ou double, Apache ralise une recherche DNS pour capturer le nom d'hte du client, introduisant un dlai dans la rponse au client. Le paramtre par dfaut vaut HostnameLookups off. Si vous devez utiliser les noms d'htes, vous pouvez toujours traiter les journaux de requte avec un systme de rsolution de journaux par la suite (voir Chapitre 3). D'autres paramtres peuvent dclencher une recherche DNS, mme si HostnameLookups est rgl sur off, par exemple lorsqu'un nom d'hte est utilis dans des rgles Allow ou Deny (voir Chapitre 6).

Demander un mcanisme d'acceptation


Apache peut utiliser diffrents mcanismes pour contrler la manire dont les enfants Apache arbitrent les requtes. Le mcanisme optimal dpend de la plate-forme spcifique et du nombre de processeurs. Vous trouverez d'autres informations l'adresse http://httpd.apache.org/docs/ 2.0/misc/perf-tuning.html.

Personnalisation du rseau et des paramtres de statut

179

mod_status
Ce module collecte des statistiques sur le serveur, les connexions et les requtes. Mme s'il peut tre utile pour dpanner Apache, il peut aussi ralentir le serveur. Pour obtenir des performances optimales, dsactivez ce module, ou vrifiez au moins que ExtendedStatus soit rgl sur off, le paramtre par dfaut.

AcceptFilter
AcceptFilter http data AcceptFilter https data

Plusieurs systmes d'exploitation, comme Linux et FreeBSD, vous permettent de dsigner certains sockets d'coute comme grant des protocoles spcifiques. Il est ainsi possible de demander au kernel de ne transfrer une requte Apache qu'une fois que tout le contenu de la requte HTTP a t reu, ce qui amliore les performances. Cette capacit n'est implmente que dans Apache 2.1 et versions ultrieures, mme s'il existe une version prcdente de la directive AcceptFilter, spcifique BSD et prsente dans Apache 1.3.22 et versions ultrieures.

KeepAlive
KeepAlive On KeepAliveTimeout 5 MaxKeepAliveRequests 500

HTTP 1.1 permet de desservir plusieurs requtes sur une seule connexion. HTTP 1.0 offre la mme chose avec des extensions de maintien en activit (keep alive). La directive KeepAliveTimeout permet de spcifier le dlai maximal

180

CHAPITRE 9 Performances et volutivit

(en secondes) pendant lequel le serveur attend avant de terminer une connexion inactive. Augmenter la temporisation signifie que vous augmenterez les chances que la connexion soit rutilise. D'autre part, la connexion et le processus Apache sont lis pendant le temps d'attente, ce qui peut gner l'volutivit, comme indiqu prcdemment. La directive MaxKeepAliveRequest permet de spcifier le nombre maximal de fois o la connexion sera rutilise.

Eviter les abus


TimeOut LimitRequestBody LimitRequestFields LimitRequestFieldSize LimitRequestLine LimitXMLRequestBody

Les attaques de refus de service submergent votre site d'un grand nombre de requtes simultanes, ce qui ralentit le serveur et empche d'accder aux clients lgitimes. Ces attaques sont difficiles viter ; la manire la plus efficace de les traiter consiste gnralement agir au niveau du rseau ou du systme d'exploitation. Vous pouvez, par exemple, empcher des adresses spcifiques de gnrer des requtes sur le serveur ; vous pouvez bloquer ces adresses au niveau du serveur Web, mais il vaut mieux procder au niveau du pare-feu ou du routeur du rseau, ou encore avec les filtres rseau installs au niveau du systme d'exploitation. Citons comme autres types d'abus l'envoi de requtes extrmement volumineuses ou l'ouverture d'un grand nombre de connexions simultanes. Vous pouvez galement

Restriction des connexions et de la bande passante

181

limiter la taille des requtes et des temporisations pour rduire l'effet des attaques. La temporisation par dfaut des requtes est de 300 secondes, mais vous pouvez la modifier l'aide de la directive TimeOut. A noter que plusieurs directives permettent de contrler la taille du corps de la requte et des en-ttes : LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine et LimitXMLRequestBody.

Restriction des connexions et de la bande passante


Si vous fournissez des services d'hbergement plusieurs clients, il est possible qu'un site Web dgrade les performances du service dans son ensemble. Cela peut tre d au fait que le site Web provient d'une page d'actualits fort trafic (effet dit "Slashdot") ou qu'il hberge un ensemble trs demand de fichiers musique ou vido. Plusieurs modules Apache permettent de mesurer et de contrler 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 gnralement la livraison du contenu selon le fichier demand, une adresse IP de client spcifique, le nombre de requtes simultanes, etc. Le module mod_bandwidth d'Apache 1.3 autorise le paramtrage des limites de bande passante sur tout le serveur ou par connexions, en fonction du rpertoire spcifique, 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.

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 antrieures d'Apache 2. Vous trouverez ce module l'adresse : http://www.topology.org/src/bwshare/ README .html. Le module mod_throttle rduit la bande passante pour chaque hte 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'accdent des parties de sites possdant des limites. Vous trouverez ce module l'adresse : http://www.robotcop.org/.
mod_require_host permet de limiter l'accs ces clients (par exemple de nombreux vers IIS) qui ne fournissent pas d'en-tte d'hte 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 simultanes par adresses IP et limite le dbit auquel Apache envoie des donnes 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 hte virtuel. Vous trouverez ce module l'adresse : http://sourceforge.net/projects/ mod-tsunami/.

Gestion des robots

183

Gestion des robots


http://www.robotstxt.org/

Les "robots du Web" dsignent une catgorie de programmes qui tlchargent des pages de votre site Web, en suivant, de manire rcursive, les liens qu'il contient. Des moteurs de recherche sur le Web font appel ces programmes pour parcourir Internet la recherche de serveurs Web ; ils tlchargent leur contenu et l'indexent. Un utilisateur lambda les exploite pour tlcharger tout ou partie d'un site Web, afin de le consulter hors connexion ultrieurement. Gnralement, ces programmes se comportent bien, mais ils peuvent parfois tre trs agressifs et inonder votre site d'un nombre de connexions simultanes trop important ou s'enfermer dans des boucles cycliques. Les robots traditionnels demandent un fichier particulier, appel robots.txt, qui contient des instructions sur la manire d'accder 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 requtes au niveau du routeur ou du systme 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 prcdente) qui permet d'arrter les robots au comportement indlicat.

184

CHAPITRE 9 Performances et volutivit

Proxy inverses et systmes d'quilibrage des charges


mod_proxy_http mod_backhand http://www.backhand.org/mod_backhand/

Nous avons parl jusqu' prsent de l'volutivit verticale, qui montre comment amliorer les performances d'une configuration de serveur unique. La distribution des charges sur plusieurs serveurs Web correspond l'volutivit horizontale. Dans cet ensemble d'architectures, vous pouvez prolonger les capacits en ajoutant simplement de nouvelles machines et en amliorant la quantit de trafic auquel vous pouvez rpondre, 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 lgers traitent le contenu statique et grent les requtes SSL et les connexions lentes, tout en relayant les requtes vers des URL spcifiques des serveurs d'arrire-guichet spcialiss. Plusieurs socits proposent des produits commerciaux qui implmentent cette fonctionnalit, en s'appuyant sur des structures matrielles. Enfin, le module mod_backhand (qui provient d'Apache 1.3) assure une redirection dynamique des requtes HTTP dans une grappe de machines, en fonction des ressources disponibles.

Mise en cache et compression

185

Mise en cache et compression


Le moyen le plus rapide de desservir du contenu consiste ne pas le desservir du tout ! Vous pouvez pour cela employer les en-ttes HTTP appropris, qui indiquent aux clients et aux proxy la validit temporelle des ressources demandes. De cette manire, certaines ressources qui figurent sur plusieurs pages mais ne sont pas souvent modifies, comme les logos ou les boutons de navigation, sont transmises une fois seulement pendant une priode donne. De plus, vous pouvez utiliser mod_cache (voir Chapitre 10) pour mettre en cache un contenu dynamique, de sorte qu'il ne soit pas ncessaire de le crer pour chaque requte. Cela peut considrablement amliorer les performances, car le contenu dynamique doit gnralement accder aux bases de donnes, traiter des modles, etc., ce qui peut consommer des ressources considrables. Autre moyen de rduire la charge sur le serveur : diminuer la somme de donnes transfres au client. Cela acclre ensuite l'accs au site Web de vos clients, en particulier pour ceux disposant de liens lents. Pour vous aider raliser cela, vous pouvez rduire le nombre et la taille de vos images. Vous pouvez automatiser une partie du traitement en employant les outils de ligne de commande ImageMagick (http://www.imagemagick.org). De plus, vous pouvez compresser les fichiers tlchargeables volumineux (voire les fichiers HTML statiques) et utiliser la ngociation du contenu, comme indiqu aux prcdents chapitres. Le Chapitre 11 explique comment utiliser le module de filtrage 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 processus sera libr plus tt pour rpondre aux autres requtes.

186

CHAPITRE 9 Performances et volutivit

Optimisations spciques aux modules


Comme indiqu au dbut de ce chapitre, la plupart des tranglements ont lieu aux niveaux de l'accs la base de donnes et de la gnration du contenu. Plusieurs modules peuvent vous aider. Ainsi, par exemple, FastCGI et mod_perl peuvent servir acclrer l'excution d'un script CGI (voir la section "Amlioration des performances du script CGI", au Chapitre 4). D'autre part, plusieurs systmes de codage et d'optimisation ont t crs pour PHP, le langage de dveloppement Web le plus populaire qui s'excute sous Apache.

Alternatives Apache
b 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, sr et extrmement flexible. Pour cela prcisment, ce n'est pas toujours la meilleure solution dans toutes les situations. Les serveurs indiqus ici sont optimiss et lgers ; ils fonctionnent ou voluent souvent mieux qu'Apache concernant certaines tches. Ainsi, par exemple, des sites Web populaires (comme Slashdot) emploient Apache excutant mod_perl pour gnrer du contenu et un serveur diffrent (comme Boa) pour desservir des images statiques. Cela s'accomplit facilement en envoyant les images partir d'un domaine diffrent, par exemple images.slashdot.org. Certains des projets comprennent galement d'autres fonctions populaires d'Apache, comme la rcriture des URL et la prise en charge du PHP.

10
Proxy Apache et mise en cache
De l'utilit de la mise en cache et des proxy
HTTP est un protocole aussi simple que puissant. Ce chapitre explique comment profiter de la mise en cache et des fonctions de proxy qui permettent d'implmenter des architectures flexibles et volutives. La mise en cache permet de rduire simultanment la charge des serveurs et d'allouer un accs plus rapide votre site par un retour plus rapide aux contenus frquemment demands. L'installation d'un proxy permet de crer un point de contrle pour toute requte HTTP, qui peut tre utilis pour unifier les contenus provenant de divers serveurs d'arrire-guichet, de manire amliorer les performances.

188

CHAPITRE 10 Proxy Apache et mise en cache

Proxy ordinaires et inverses


Il existe diffrents types de proxy Web. Un proxy HTTP traditionnel, aussi appel proxy ordinaire, accepte des requtes de clients (gnralement des navigateurs Web), contacte le serveur distant et renvoie la rponse. Un proxy inverse est un serveur Web plac devant les autres serveurs, qui propose une faade unifie et agit ainsi comme une passerelle. Pour les navigateurs Web, le proxy inverse est le "vrai" serveur, car il est le seul interagir avec lui. Il relaye les requtes lorsque c'est ncessaire jusqu'aux serveurs d'arrire-guichet.

Diffrences entre Apache 1.3, 2.0 et 2.2


Dans Apache 1.3, la prise en charge de la mise en cache faisait partie de mod_proxy et ne pouvait pas tre utilise sparment. Dans la version 2.0, la fonction a t divise en deux modules distincts, mme si le code en rsultant est considr comme exprimental. La situation a chang avec les versions 2.1 et 2.2, o la fonctionnalit est dsormais considre mature.

Activation de la prise en charge de mod_proxy

189

Activation de la prise en charge de mod_proxy


Apache 1.3
--enable-module=proxy --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-balancer (Apache versions 2.1 et ultrieures) --enable-proxy-ajp (Apache versions 2.1 et ultrieures)

Pour activer la prise en charge des proxy dans Apache, vous devez activer le module proxy principal et tout ou partie des trois arrire-guichets pris en charge : HTTP, CONNECT et FTP. L'option CONNECT permet aux connexions SSL de transiter sans perte d'intgrit via le proxy. L'arrire-guichet FTP permet au serveur proxy d'agir en tant que passerelle pour accder aux serveurs FTP distants via un navigateur HTTP normal. Les versions 2.1 et suprieures 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, frquemment utilis pour communiquer avec Tomcat et d'autres moteurs de servlet.

Activation de la prise en charge des proxy ordinaires


ProxyRequests on <Proxy *> Order deny,allow Deny from all Allow from 10.0.0.0/255.255.255.0 </Proxy>

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 connexion vers le monde extrieur. 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 extrieur. Les connexions rapides et les NAT (Network Address Translation) intgrs dans la plupart des dispositifs de passerelle ont considrablement rduit les besoins de proxy ordinaires. De nos jours, ils sont plus souvent implments dans des entreprises qui doivent contrler la navigation de leurs employs, utilisant le proxy pour consigner, filtrer et autoriser les accs aux sites web. Cela commence changer. A mesure que se multiplient les virus et les logiciels espion, les entreprises mettent en place des proxy de filtrage qui liminent ces menaces avant qu'elles ne parviennent sur le bureau des utilisateurs. Les proxy ont trouv une nouvelle jeunesse dans le monde des rseaux sans-fil, o ils servent de passerelles. Vous pouvez activer les fonctionnalits des proxy ordinaires en utilisant ProxyRequests On, comme indiqu dans l'exemple. Il est conseill de retreindre la prise en charge du proxy uniquement aux clients autoriss (voir Chapitre 6). Vous pouvez y parvenir en utilisant la directive de section <proxy>. L'exemple montre comment restreindre l'accs du proxy un espace rseau spcifique.

Utilisation d'un proxy inverse pour unifier un espace URL

191

Utilisation d'un proxy inverse pour unier un espace URL


ProxyPass /crm http://crm.exemple.com/ ProxyPass /bugzilla http://backend.exemple.com/bugzilla

Un proxy inverse peut offrir un frontal unifi pour plusieurs ressources d'arrire-guichet, en associant certaines URL sur la machine frontale des serveurs Web d'arrire-guichet spcifiques. 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 application, il leur faut taper une adresse diffrente. Vous pouvez intgrer ces services dans votre site principal, en utilisant ProxyPass, comme indiqu dans l'exemple. Dsormais, lorsque la machine de proxy inverse recevra une requte pour http://www.exemple.com/crm/login/ index.html, elle demandera http://crm.exemple.com/login/ index.html au serveur d'arrire-guichet et renverra le document au navigateur. La directive ProxyPass peut tre utilise seule ou l'intrieur d'une section <Location>, ainsi que le montre l'exemple suivant :
<Location /crm> ProxyPass http://crm.exemple.com/ </Location>

Au final, vous pourrez utiliser ProxyPass simultanment avec ProxyPassReverse, dcrit la section suivante.

192

CHAPITRE 10 Proxy Apache et mise en cache

Masquage des serveurs d'arrire-guichet


ProxyPass /crm http://crm.exemple.com ProxyPassReverse /crm http://crm.exemple.com ProxyErrorOverride On

Au cours du processus dcrit la section prcdente, le client n'a contact que le serveur de proxy inverse ; il ne souponne pas l'existence des serveurs d'arrire-guichet. Parfois cependant, le serveur d'arrire-guichet met des pages de redirection ou d'erreur qui contiennent des rfrences lui-mme, par exemple dans l'en-tte Location:. La directive ProxyPassReverse intercepte ces en-ttes et les rcrit de manire qu'ils contiennent une rfrence au proxy inverse (www.exemple.com). Les directives ProxyPassReverseCookiePath et ProxyPassReverseCookieDomain oprent de faon analogue, mais sur le chemin et les chanes de domaine situs sur les en-ttes Set-Cookie:. De plus, ProxyErrorOverride (uniquement disponible dans Apache 2) permet d'afficher la page d'erreur du serveur proxy, remplaant ainsi les pages d'erreur reues de l'arrire-guichet. Cela permet de mieux masquer l'existence de ce serveur et d'obtenir un frontal constant, mme en cas de messages d'erreur.
Info Sachez que la directive ProxyPassReverse opre seulement au niveau de l'en-tte HTTP. Elle ne vrifie pas, ni ne rcrit les liens qui sont contenus l'intrieur des documents HTML. Afin de raliser cela, vous pouvez utiliser mod_proxy_html, un module Apache 2 qui permet de parcourir les documents desservis via le proxy et de rcrire le code HTML la vole. Vous pouvez tlcharger ce module l'adresse http://apache.webthing.com/ mod_proxy_html/.

Eviter l'inversion des URL en proxy

193

Eviter l'inversion des URL en proxy


ProxyPass /images/ ! ProxyPass / http://crm.exemple.com

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 places en aval des autres directives ProxyPass. Par exemple, la configuration montre ici enverra toutes les requtes un site d'arrire-guichet, l'exception des requtes d'images, qui seront desservies localement.

Amlioration des performances


ProxyIOBufferSize 1024000

Les proxy inverses peuvent galement tre trs utiles si vous disposez de serveurs Web et de serveurs d'application complexes et surchargs. Les clients lents des lignes par modem, les navigateurs prsentant des bogues et les gros fichiers multimdias peuvent mobiliser des ressources prcieuses des serveurs crateurs de contenu. Si un client requiert un gros fichier statique et le tlcharge lentement, un thread (ou un processus) enfant d'Apache sera occup le desservir jusqu'au terme du tlchargement. Un scnario analogue survient lorsqu'une implmentation TCP/IP bogue ne parvient pas fermer correctement une connexion au serveur la fin d'une transmission. On appelle ce phnomne un "problme de fermeture persistante".

194

CHAPITRE 10 Proxy Apache et mise en cache

Cela entrane une mobilisation excessive des ressources jusqu' ce que la connexion soit ferme pour cause de dpassement du dlai. Cependant, mme si ces situations sont rarement vitables, le vrai problme survient lorsque vous utilisez des MPM bass sur les processus (tel le MPM Prefork). Ainsi, si vous employez mod_perl dans Apache 1.3 avec de nombreux autres modules Perl chargs et quelques donnes mises en cache, les enfants Apache qui en rsultent auront probablement une taille de quelques mgaoctets. Si l'un d'eux "perd du temps" vouloir desservir un fichier statique ou attendre la fermeture d'une connexion, moins de ressources seront disponibles pour servir les requtes restantes. Un proxy inverse peut aider dans ce cas. Vous pouvez avoir un ou plusieurs frontaux Apache lgers, avec des threads, qui desservent des contenus statiques et s'occupent des clients lents et bogus, ainsi que des serveurs toutes fonctionnalits en arrire-guichet qui s'occupent de gnrer le contenu dynamique. Vous pouvez personnaliser ProxyIOBufferSize de manire que les gros fichiers soient transfrs rapidement au proxy inverse et que la connexion au serveur d'arrire-guichet soit libre aussi tt que possible. Cela rduit la charge impose au serveur d'arrire-guichet mais accrot la consommation de mmoire de la machine du proxy. Dans Apache 2.1, de rcents MPM permettent un mme enfant Apache de grer plusieurs connexions, avec possibilit d'avoir un thread ddi dont la tche consiste attendre la fermeture des connexions. Ces MPM, mesure qu'ils mrissent, permettent Apache de mieux voluer dans bon nombre de situations.

Dchargement du processus SSL

195

Dchargement du processus SSL


Nous 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'arrire-guichet d'une manire similaire celle dcrite dans la section prcdente. Un moyen de rsoudre ce problme consiste disposer de botes ddies et optimises faisant fonctionner un proxy inverse avec une prise en charge SSL. Le proxy inverse ralise l'ensemble des oprations lourdes : il traite les requtes SSL, peut ventuellement faire les authentifications bases sur des certificats et transmet les requtes en HTTP brut aux serveurs d'arrire-guichet. Le contenu est gnr et renvoy au proxy inverse, qui ralise la tche (gourmande en ressources) consistant le crypter. Puisque le point final du SSL est le proxy inverse, certaines informations (telles que celles lies au certificat) sont perdues et n'atteignent pas le serveur d'arrire-guichet. La manire de raliser cela est dcrite aux deux sections suivantes.

Transfert des informations de proxy dans les en-ttes


ProxyPreserveHost on

Quand Apache agit en tant que proxy inverse, l'en-tte Host: est modifi dans la requte de proxy pour correspondre au nom d'hte spcifi dans la directive ProxyPass. L'en-tte Host: original est plac dans un autre en-tte, XForwarded-Host. Dans certaines situations, il est prfrable de prserver la valeur originale de l'en-tte.

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 requte sont perdues lorsqu'un proxy inverse est install. Celui-ci enregistre quelques-unes de ces informations dans de nouveaux en-ttes qui sont ajouts la requte faite au serveur d'arrire-guichet : b X-Forwarded-For. Adresse IP ou nom d'hte du client. b X-Forwarded-Host. Hte original demand. b X-Forwarded-Server. Nom d'hte pour le serveur proxy. Vous pouvez envoyer des informations supplmentaires en utilisant les directives Header et RequestHeader, comme indiqu la section suivante.

Manipulation des en-ttes


Header set nom-en-tete valeur-en-tete

Vous pouvez envoyer des informations supplmentaires un serveur d'arrire-guichet en utilisant la directive Header, fournie par le module mod_headers. Ce module peut tre utilis pour ajouter ou supprimer des en-ttes arbitraires dans les requtes et rponses HTTP. Vous pouvez ajouter un en-tte HTTP de rponse, en supprimant tout autre en-tte HTTP ayant le mme nom et pouvant tre prsent, en utilisant Header set, comme montr dans l'exemple. Si vous voulez ajouter un nouvel en-tte plutt qu'en remplacer un existant, employez Header add. Pour ajouter la valeur un en-tte existant, effacer certains en-ttes ou ajouter un en-tte de requte la rponse, adoptez respectivement append, unset et echo.

Implmentation d'un proxy de cache

197

Vous pouvez modifier les en-ttes des requtes envoyes au client en utilisant RequestHeader au lieu de Header. Vous pouvez ajouter le contenu de variables d'environnement dans l'argument headervalue, l'aide de la chane de format %{nomvariable}e. Ce fonctionnement est semblable celui de la directive LogFormat (voir Chapitre 3, "Journaux et surveillance"). Par exemple, vous pouvez l'utiliser pour transmettre des informations sur une connexion SSL et des certificats au serveur d'arrire-guichet. Pour cela, vous devrez tout d'abord indiquer mod_ssl de stocker ces informations dans des variables d'environnement, avec SSLOptions +StdEnvVars. Dans Apache 2.1, vous pouvez passer cette tape et accder directement aux variables d'environnement SSL, avec %{nom-variable}s.

Implmentation d'un proxy de cache


CacheRoot /usr/local/apache/cache CacheSize 500000 CacheGcInterval 6 CacheMaxExpire 12

L'un des avantages d'un proxy rside 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 vrifier qu'il est dj prsent dans son cache, et le desservira alors directement. Dans Apache 1.3, la fonctionnalit de mise en cache est implmente dans le cadre du module mod_proxy. Ces directives reprsentent un exemple de configuration. CacheRoot permet de spcifier 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.

198

CHAPITRE 10 Proxy Apache et mise en cache

CacheGcInterval permet de spcifier la frquence (en heures) laquelle le cache sera priodiquement "purg", afin d'tre en adquation avec le rglage CacheSize. CacheMaxExpire spcifie le temps maximal pendant lequel un document peut rester dans le cache et tre toujours considr comme tant valable, sans avoir tre compar la source originale.

Mise en cache dans Apache 2


CacheEnable disk / CacheRoot /usr/local/apache/cache

La fonctionnalit de mise en cache et de mise en proxy dans Apache a t spare en deux modules distincts depuis Apache 2. Considre comme tant exprimentale 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 implmente par mod_cache. Ce module possde son tour deux arrire-guichets : mod_mem_cache, qui stocke les ressources mises en cache directement en mmoire et mod_disk_cache, qui utilise le systme de fichiers. La directive CacheEnable prend un paramtre d'arrire-guichet de mise en cache (mem ou disk), ainsi qu'un prfixe d'URL. Les requtes qui contiennent le prfixe URL seront mises en cache par l'arrire-guichet spcifique. Vous pouvez utiliser CacheDisable pour dsactiver la mise en cache d'URL spcifiques. Il est galement possible de recourir l'utilitaire de ligne de commande htcacheclean, afin de rduire le cache intervalles prdfinis lors de l'utilisation de l'arrire-guichet disk.

Equilibrage des charges

199

De mme, si certains de vos fichiers sont frquemment demands et si vous savez qu'ils ne changeront pas pendant la dure de vie du serveur, vous pouvez utiliser mod_file_cache pour dire Apache de mettre en correspondance les fichiers spcifiques en mmoire ou de mettre 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 redmarrer le serveur pour que les changements prennent effet.

Equilibrage des charges


<Location /balancer-manager> SetHandler balancer-manager Order deny,allow Deny 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/

Disponible depuis Apache 2.2, mod_proxy inclut un nouvel arrire-guichet qui offre des capacits d'quilibrage des charges. Le code d'quilibrage des charges est gnrique et permet d'quilibrer de multiples autres protocoles en plus du HTTP. Pour le configurer, vous devez d'abord dfinir un groupe de serveurs d'arrire-guichet avec une section <proxy balancer://...>, comme indiqu ici.

200

CHAPITRE 10 Proxy Apache et mise en cache

Une fois dfini, vous pouvez utiliser l'ID du systme d'quilibrage avec une directive ProxyPass rgulire. Chaque identifiant et lment du systme d'quilibrage peut prendre des options pour spcifier des stratgies d'quilibrage (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 vrifier le niveau de votre configuration, l'aide de la commande rgulire status, et la manipuler, l'aide de la commande balancer-manager.

Connexion Tomcat
ProxyPass /myapp ajp://127.0.0.1:8009/myapp ProxyPassReverse /myapp ajp://127.0.0.1:8009/myapp

Depuis Apache 2, mod_proxy inclut un protocole d'arrireguichet AJP. Ce protocole est gnralement 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 dsormais possible de remplacer mod_jk par les modules mod_proxy et mod_proxy_ajp. Vous bnficiez ainsi de quelques-unes de leurs nouvelles fonctionnalits dans mod_proxy, par exemple l'quilibrage des charges. Comme indiqu dans l'exemple, la configuration 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'quilibrage des charges).

Autres proxy

201

Autres proxy
Squid http://www.squid-cache.org/ Pound http://www.apsis.ch/pound/

Nous l'expliquions au Chapitre 9, "Performances et volutivit", Apache n'est pas forcment le meilleur choix dans tous les scnarios. Il existe ainsi plusieurs autres serveurs proxy spcialiss qui pourraient fonctionner de faon plus satisfaisante, selon vos besoins. Deux des serveurs proxy Open Source les plus populaires se nomment Pound et Squid : b Squid est sorti peu prs au mme moment qu'Apache. Il est fortement configurable et excelle dans la mise en cache. b Pound est un serveur proxy lger, souvent utilis comme proxy inverse SSL.

Proxy HTTP transparents


Nous l'avons vu, un proxy ordinaire de mise en cache requiert que chaque client soit correctement configur. Il est aussi possible d'implmenter des proxy dits "transparents". Ces machines interceptent les requtes HTTP au niveau de la couche rseau. Ensuite, de manire "transparente", elles les desservent au travers d'un serveur proxy sans que l'utilisateur final ne s'en aperoive. Les proxy transparents sont toujours populaires auprs des FAI qui veulent rduire les cots de bande passante ou contrler les habitudes de navigation de leurs clients. Certaines organisations 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").

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 rgles de transfert des paquets du systme d'exploitation. Pour plus d'informations sur la configuration de proxy HTTP transparents, suivez ce lien de la documentation de projet Linux :
http://www.tldp.org/HOWTO/Transparentproxy.html.

11
Multitraitement et modules de protocole
Evolution de l'architecture Apache
Apache n'est pas un serveur monolithique. De nouveaux modules peuvent y tre ajouts, afin de fournir des fonctionnalits avances. De mme, des modules existants peuvent en tre retirs, de sorte rduire la taille du serveur, et ainsi amliorer les performances. Apache 2 prolonge ce concept de modularit et introduit trois nouvelles voies d'extension du serveur : b Modules multitraitement (MPM). Permettent de modifier la manire dont les serveurs Apache desservent les requtes. Amliorent 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 analyse. Il est donc possible pour Apache de desservir un contenu utilisant d'autres protocoles, tels que FTP.

204

CHAPITRE 11 Multitraitement et modules de protocole

Slection d'un module multitraitement


--with-mpm=worker --with-mpm=prefork

Mme si la slection du MPM dpend de plusieurs facteurs (dont la prise en charge de modules et de fonctionnalits tiers spcifiques), certains MPM se comportent mieux sur certaines plates-formes. Ainsi, les processus sur AIX tant "lourds", un MPM avec des threads sera prfrable pour l'volutivit qu'il apporte. Sachez toutefois qu'il n'est pas possible de modifier le mcanisme de traitement des requtes dans Apache 1.3. Avec Apache 2, vous slectionnez un MPM pendant la configuration et vous montez le processus avec l'option --with-mpm. Actuellement, Windows possde ses propres MPM bass sur des threads. Pour sa part, UNIX possde deux MPM stables : prefork et worker. Plusieurs autres modules sont distribus avec le serveur et utiliss titre exprimental. Les sections suivantes dcrivent les fonctions des diffrents MPM et indiquent la manire de les configurer.

Dcouverte des MPM bass sur les processus


Avec une configuration de serveur bas sur les processus, le serveur procde une "bifurcation" (un fork) sur plusieurs enfants. Cela signifie qu'un processus parent ralise des copies identiques de lui-mme, appeles des enfants. Chacun des enfants peut desservir une requte indpendamment des autres. Cette approche prsente l'avantage

Configuration de MPM Prefork

205

d'amliorer la stabilit : si l'un des enfants se comporte mal, par exemple en perdant de la mmoire, il peut tre arrt sans que cela n'affecte le reste du serveur. L'amlioration de la stabilit s'accompagne d'une pnalit au niveau des performances : chacun des enfants mobilise de la mmoire supplmentaire, et le systme d'exploitation 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. Apache 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 dmarrage, plutt que lorsqu'une requte arrive. A noter qu'Apache permet de configurer le nombre d'enfants tablir au dmarrage, ainsi que le nombre maximal d'enfants possibles (voir section suivante).

Conguration de MPM Prefork


StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0

Vous pouvez contrler le nombre de processus crs au dmarrage, l'aide de la directive StartServers. Celle-ci prend un argument unique, indiquant le nombre de serveurs faire bifurquer lorsque le serveur dmarre. La valeur par dfaut est 5 ; elle convient pour la plupart des sites web. Ne modifiez ce rglage que si vous grez un site Web trs frquent.

206

CHAPITRE 11 Multitraitement et modules de protocole

MaxClients permet de contrler le nombre maximal de

processus engendrs, dans la limite des capacits du systme d'exploitation ou en fonction du nombre maximal d'enfants possibles. Dans Apache 1.3, le nombre maximal d'enfants possible est cod en dur 256. Pour modifier cette valeur, vous devez intervenir sur le rglage HARD_SERVER_LIMIT dans httpd.h, puis recompiler le serveur. Dans Apache 2, cette valeur peut tre modifie dans la configuration, en utilisant la directive ServerLimit. La directive MinSpareServers dfinit le nombre maximal de processus pouvant rester inactifs (les requtes ne sont pas traites) un moment donn. Si le nombre de serveurs inactifs descend sous cette valeur, Apache engendre de nouveaux enfants. A l'inverse, MaxSpareServers fixe le nombre maximal de processus inactifs autoriss.Si le nombre de serveurs inactifs dpasse ce rglage, certains d'entre eux sont arrts. La valeur par dfaut, prsente dans l'exemple, devrait tre suffisante pour la plupart des serveurs. Au final, vous pouvez limiter le nombre de requtes traites par un processus spcifique, en utilisant la directive MaxRequestsPerChild. Sachez qu'elle ne dnombre pas les requtes multiples qui rutilisent la mme connexion. Comme expliqu prcdemment dans ce chapitre, cela permet d'viter les fuites de mmoire pour des processus qui fonctionnent depuis un long moment. Le serveur arrte le processus et le remplace par un nouveau, aprs le nombre spcifi de requtes. Vous pouvez fixer la valeur de MaxRequestsPerChild sur 0 pour empcher que les processus ne soient arrts aprs un nombre dfini de requtes.

MPM bass sur des threads et MPM hybrides

207

MPM bass sur des threads et MPM hybrides


Les threads sont semblables aux processus, mais ils peuvent partager de la mmoire et des donnes avec d'autres threads. Cela prsente l'avantage de ne pas ncessiter de changement de contexte (les threads font partie du mme processus). Toutefois, l'inconvnient est qu'un code mal crit peut faire tomber le serveur. En effet, un thread se comportant mal est capable d'craser et de corrompre des donnes 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 bass sur des processus ou des threads prsentent chacun des avantages et des inconvnients. Les dveloppeurs d'Apache ont cr un MPM bas sur des threads, MPM Worker, qui autorise une approche mixte. Un serveur peut engendrer diffrents processus, chacun contenant plusieurs threads.

Conguration de MPM Worker


StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0

Le MPM Worker est un MPM Apache 2 qui permet de combiner les processus et les threads. Vous pouvez spcifier le nombre de processus qui seront crs au dmarrage, en utilisant la directive StartServers, comme avec le MPM Prefork. Chacun des processus possdera plusieurs threads ; ce nombre sera spcifi par la directive ThreadsPerChild.

208

CHAPITRE 11 Multitraitement et modules de protocole

Le nombre de threads dans chaque processus est fix, mais les processus sont crs ou dtruits, afin de maintenir le nombre total de threads dans les limites spcifies. Ces limites peuvent tre configures en utilisant les directives MinSpareThreads et MaxSpareThreads. Ce sont les contreparties des directives MaxSpareServers et MinSpareServers dans les serveurs bass sur les processus. Apache surveille le nombre total de threads sur tous les processus et cre ou dtruit les processus en consquence. A l'instar du Prefork, MaxClients spcifie le nombre maximal de processus. Dans le MPM Worker, chaque processus possde plusieurs threads. Le nombre maximal de clients simultans est donc MaxClients fois le rglage de ThreadsPerChild. MaxThreadsPerChild spcifie le nombre maximal de threads par processus ; il peut tre modifi entre chaque redmarrage. ThreadLimit spcifie une limite suprieure qui ne peut tre modifie entre les redmarrages. Les directives StartServers et MaxClients sont identiques celles dcrites la section "Configuration de MPM Prefork".

Autres MPM
--with-mpm=event --with-mpm=perchild

Apache 2 comprend plusieurs MPM supplmentaires, dsigns comme tant exprimentaux. Deux des plus intressants sont le MPM Event et le MPM Perchild. Le MPM Event, prsent uniquement dans Apache 2.1, est une variante du MPM Worker. Dans ce MPM, un thread spar gre tous les sockets d'coute et les connexions de maintien en activit. Cela accrot considrablement l'volutivit, les threads restants pouvant traiter des requtes au lieu d'attendre que le client ferme une connexion ou

Description des filtres Apache 2

209

mette une nouvelle requte. Ce MPM rsout certains problmes dcrits au Chapitre 10, "Proxy Apache et mise en cache". Le MPM Perchild permet Apache de faire tourner diffrents htes virtuels sous divers ID utilisateurs. Cela peut aider amliorer la scurit et fournit une alternative l'excution d'instances de serveurs spares. Enfin, le MPM Metux fournit une alternative au MPM Perchild. Il peut tre tlcharg l'adresse http://www .metux.de/mpm.

Description des ltres Apache 2


<Directory /usr/local/apache/htdocs/> SetOutputFilter INCLUDES;PHP </Directory> AddOutputFilter INCLUDES .inc .shtml

Vous pouvez vous reprsenter l'architecture de filtrage dans Apache comme une ligne d'assemblage d'usine. Les filtres correspondent des employs ; les requtes et les rponses sont les objets transports sur la ligne. Chaque filtre traite le contenu et transmet le rsultat au filtre suivant. Les filtres peuvent traiter de l'information de diverses manires. Nombre de modules Apache sont implments sous forme de filtres, tels que SSL, SSI et sous forme de compression. Les filtres peuvent tre automatiquement ajouts par les modules au moment de l'excution ou rgls dans le fichier de configuration. L'exemple montre comment utiliser SetOutputFilter pour ajouter deux filtres tous les documents d'un rpertoire particulier et AddOutputFilter pour associer des filtres des extensions de fichier particulires. De plus, AddOutputFilterByType peut tre utilis pour associer des filtres des types de fichiers spcifiques.

210

CHAPITRE 11 Multitraitement et modules de protocole

Si plusieurs directives, comme AddOutputFilter et SetOutputFilter, s'appliquent au mme fichier, les listes de filtres des deux directives sont fusionnes. Les filtres d'entre peuvent tre configurs par le biais des directives AddInputFilter, AddInputFilterBytype et SetInputFilter, qui prsentent 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 dfinir et manipuler les chanes de filtres. Cela peut tre ralis, par exemple, en fonction de l'existence d'un en-tte HTTP particulier ou d'une variable d'environnement.

Utilisation d'Apache comme serveur FTP


Listen 10.0.0.1:21 <VirtualHost 10.0.0.1:21> FTP On DocumentRoot /usr/local/apache/ftpdocs ErrorLog /usr/local/apache/logs/ftp_error_log <Location /> AuthName "FTP" AuthType basic AuthUserFile /usr/local/apache/conf/htusers Require valid-user </Location> </VirtualHost>

Comme indiqu prcdemment dans ce chapitre, Apache 2 est bien plus qu'un simple serveur Web, c'est une structure de serveur gnrique. En montant un serveur par-dessus Apache, un dveloppeur bnficie d'une infrastructure solide et portable, d'un mcanisme d'extension et de la possibilit d'utiliser de nombreux modules tiers

Utilisation d'Apache comme serveur POP3

211

crs pour Apache. C'est le cas de mod_ftp, qui ajoute des capacits FTP Apache. La plupart des paramtres de configuration (notamment les directives d'authentification) sont partags avec le reste du serveur. Vous pouvez activer la prise en charge FTP en ajoutant simplement FTP On dans la section Virtual Host approprie. D'autres directives, comme FTPUmask, FTPTimeoutLogin, FTPBannerMessage et FTPMaxLoginAttempts, permettent de configurer des fonctions 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 dornavant tre tlcharg l'adresse http://incubator.apache.org/ projects/mod_ftp.html.

Utilisation d'Apache comme serveur POP3


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 Basic Require valid-user </directory> </VirtualHost>

Ce module permet Apache 2 d'agir comme serveur POP3. POP3 (Post Office Protocol, version 3) est frquemment utilis, notamment parce qu'il permet aux clients de messagerie (comme Outlook, Eudora ou Netscape Mail) de rcuprer des messages partir d'un serveur central.

212

CHAPITRE 11 Multitraitement et modules de protocole

Sachez que ce module n'autorise pas les systmes de lecture 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'hte virtuel approprie. POP3MailDrops prcise l'emplacement des botes de rception des utilisateurs. L'utilisateur sous lequel Apache s'excute doit pouvoir lire et crire sur ces botes de rception. Vous pouvez tlcharger mod_pop3 l'adresse http://svn .apache.org/viewcvs.cgi/httpd/mod_pop3/.

Compression de contenu la vole


#Apache 2 mod_deflate AddOutputFilterByType DEFLATE text/html text/plain text/xml SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary BrowserMatch ^Mozilla/4 gzip-only-text/html #Apache 1.3 mod_gzip mod_gzip_static_suffix .gz AddEncoding gzip .gz mod_gzip_item_include file \.html$

Le module de filtrage mod_deflate (Apache 2) propose un filtre, DEFLATE, capable de compresser les donnes sortantes. La compression peut consommer beaucoup de ressources de l'unit centrale, mais elle prsente l'avantage de rduire la quantit de donnes qui seront transfres vers le client. Cela est utile lorsque les clients se connectent Internet par le biais de liens lents et que le contenu peut tre considrablement compress, comme avec les pages HTML.

Compression de contenu la vole

213

D'autres contenus dj compresss, comme des fichiers ZIP ou des images JPEG, ne profiteront que trs peu (voire pas du tout) d'une compression supplmentaire. Bien entendu, pour que la compression du contenu fonctionne, le client doit prendre en charge la fonctionnalit oppose : la dcompression. Cela vaut galement pour les navigateurs les plus modernes. Si un client spcifique rencontre des problmes pour traiter un contenu compress d'un certain type, vous pouvez paramtrer la variable d'environnement no-gzip, en utilisant les directives SetEnvIf ou BrowserMatch. Cela empchera mod_deflate de compresser le contenu dlivr 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/.

215

Index
A
AcceptFilter 179 Accs contrler 101, 104, 110, 150 interdire 43, 109 limiter 108, 119 protger 115 protger 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'accs 108 consigner 56 dj utilise 34 interdire l'accs 109 modifier 14 rsoudre 56 Affectation jeux de caractres 80 langue 80 Affichage du contenu d'une requte 137 Alias 64 AliasMatch 17, 64 Allow 104, 119 AllowOverride 99 Amlioration volutivit 170 performances 170, 193 Analyse du journal 53 Apache authentification 122 autres solutions 186 caractristiques 3 enfants 205 installation 5 sous UNIX et Linux 6, 7 sous Windows 8 POP3 211 versions 4 apachetop 53 Application, authentification 121 apxs 19 Architecture Apache 203 Archivage des journaux 55 Arguments FollowSymLinks 175 SymLinksIfOwnerMatch 175 Arrt du serveur 12 serveur 32 Arrire-guichet CONNECT 189 FTP 189 HTTP 189 masquer 192

INDEX

216

Authentification

INDEX

Authentification 102, 105 Apache 2.2 122 application 121 certificats 147 de base 103 digest 103 modules 120 processus 102 AuthGroupFile 107 AuthName 105 AuthType 105 AuthUserFile 105 Autorisation 105 fichier 126 Require 107 Autorit de certification 134, 146 Auto-sign, certificat 137 Avertissement (accs par SSL) 146

C
CA 134 Cache 185 Apache 2 198 mise en 188 mod_cache 198 proxy 197 cadaver 162 Caractres, jeux de 80 Carte (cryptographie) 144 Casse, problmes de 83 Certificat 130, 134 authentifier 147 auto-sign 137 crer 146 importer 147 requte de signature 135 CGI amliorer les performances 72 dpannage 72 excutables 70 excution 69 Charges (quilibrage) 199 Cl cryptage 132 cryptographie symtrique 132 openssl 133 paire 133 prive 132 protge 134 publique 132, 134 supprimer le mot de passe 134 ClearModuleList 18 Client comportant des bogues 164 prfrences 77

B
Bande passante restreindre 181 vol 117 bandwidth_share 182 Barre oblique finale 81 Base de donnes consigner dans 54 utilisateur 106 BindAddress 15 Bogues clients 164 contourner pour SSL 149 BrowserMatch 76 BufferedLogs 177

DAVLockDB

217

Commande configure 18 killall 32 status 200 ulimit 171 Compilation (SSL) 140 Compression des donnes sortantes 212 Configuration dsactiver les fichiers 100 fichier principal 9, 10 fichiers multiples 11 fichiers par rpertoire 98 hbergement virtuel 89, 91 hte virtuel 92, 93 minimale 140 ngociation du contenu 78 scuriser pour DAV 157 SSI 74 tester 29 WebDAV 156 configure, commande 18 CONNECT 189 Connexion dmon du journal systme 27 restreindre 181 serveur 41 surveiller 50 Tomcat 200 Consignation adresses IP 56 conditionnelle 49 dsactiver 177 format combin 48 format commun 47 requte 46 vers une base de donnes 54 Contenu configurer la ngociation 177 desservi par SSL 144

dynamique et DAV 165 gestionnaire 67 ngociation 77 publier 20, 151 Contrle accs 101, 104, 110, 119, 150 processus externes 173 Correction URL errone 82 Correspondance de type 79 Cration base de donnes utilisateur 106 CA 146 certificat client 146 icne 16 Cryptage 132 Cryptographie asymtrique 132 carte 144 cl publique 132 symtrique 132 CustomLog 48, 59

INDEX

D
DAV 153 accs depuis Firefox 161 accs depuis la ligne de commande 162 accs depuis Office 158 accs depuis Windows 159 cadaver 162 configurer 156 contenu dynamique 165 mod_speling 165 protger l'accs 157 scuriser la configuration 157 sitecopy 164 DAVLockDB 168

218

Dbogage

Dbogage 33 htes virtuels 95 mod_logio 33 mod_loopback 33 mod_tee 33 mod_trace_output 33 Dchargement (SSL) 195 Dcryptage 132 _default_ 93 DefaultLanguage 80 Dmarrage avec SSL 141 du serveur 12 serveur 41 Dmon (journal systme) 27 Deny 104, 119 Dpannage 33 accs interdit 43 connexion au serveur 41 dmarrage du serveur 41 document introuvable 42 erreur interne 44 scripts CGI 72 Dsactivation consignation 177 excution CGI 125 excution SSI 125 fichiers de configuration 100 fichiers de configuration par rpertoire 176 listings de rpertoire 115 Descripteur de fichier 173 Digest, authentification 103 Directives 11 AcceptFilter 179 AccessFilename 99 Action 68, 71 AddDefaultCharset 80 AddHandler 68 AddModule 18

Alias 64 AliasMatch 17, 64 Allow 104, 119 AllowOverride 99 AuthGroupFile 107 AuthName 105 AuthType 105 AuthUserFile 105 BindAddress 15 BrowserMatch 76 BufferedLogs 177 ClearModuleList 18 CustomLog 48, 59 DefaultLanguage 80 Deny 104, 119 DirectoryIndex 115 DirectorySlash 82 DocumentRoot 20, 89 ErrorDocument 93, 111 ErrorLog 26 ExtendedStatus On 51 Group 15 Header 196 HostNameLookups 56 Include 11 KeepAliveTimeout 179 LanguagePriority 80 Listen 14, 141 LoadModule 17, 20, 155 LogFormat 46 LogLevel 27 MaxRequestsPerChild 206 MaxSpareServers 206 MinSpareServers 206 NameVirtualHost 91 Options 114 Options +ExecCGI 70 Options +Multiviews 78 Order 104, 120 PassEnv 75

INDEX

Event

219

POP3Protocol On 212 Port 15 ProxyPass 191 ProxyPassReverse 192 ProxyRequests 190 Redirect 65 RedirectMatch 66 RemoveHandler 68 RequestHeader 197 Require 105 RLimitCPU 174 RLimitMem 174 RLimitNProc 174 Satisfy 110 Satisfy all 110 Script 71 ScriptAlias 70 ScriptLog 72 sections 22, 23 ServerName 16, 89 ServerRoot 11 ServerTokens 116 SetEnv 74 SetEnvIf 75 SetFilter 84 SetHandler 68 SSLCryptoDevice 144 SSLEngine 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-tte fin prmature 39 Host 90, 195 malform 39 manipuler 196 proxy 196 Server 116 Entre de journal 60 Environnement, variables 74 accder 75 paramtrer 75 spciales 76 Equilibrage des charges 199 Erreur adresse dj utilise 34 de segmentation 38 de syntaxe 34 en-tte malform 39 fin prmature d'en-tte 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'accs 37 rsolution de nom 36 error_log 46 ErrorDocument 93, 111 ErrorLog 26 Event 208

INDEX

220

Evolutivit du systme

Evolutivit du systme 170 Excution dsactiver CGI 125 SSI 125 restreindre de programmes 114 Exemples, supprimer 125 Expression rgulire 66 Expressions rgulires 22 ExtendedStatus On 51

G
Gestionnaire contenu 67 Graceful, redmarrage (en douceur) 14 Group 15

H
Header 196 Hbergement virtuel 87 sur IP 88, 89 sur le nom 90, 91 Host 90 en-ttes 195 HostNameLookups 56 HostnameLookups 178 Hte journal 59 mlanger 94 SSL 96 virtuel sur IP 93 sur le nom 92 virtuels 96 dboguer 95 SSL 144 Hotlinking 117 htaccess 98 htpasswd 106 HTTP 189 et WebDAV 154 proxy transparent 201 restreindre les mthodes 118 httpd.pid 61 HTTPS130

F
FastCGI 73 Fautes de frappe, corriger 82 favicon.ico 16, 60 Fichier amliorer les performances du systme 174 configuration 9, 10, 11 configuration par rpertoire dsactiver 176 favicon.ico 16, 60 htaccess 98 httpd.pid 61 journal 46 robots.txt 60 sensibles refuser l'accs 113 vrifier les autorisations 126 Filtres 209 Firefox, accs DAV 161 FollowSymLinks 175 Format combin 48 consignation 47 FTP 189 Fusion de journaux 58

INDEX

lsof

221

I
Icne, crer 16 ImageMagick 185 Images hotlinking 117 Importation certificat 147 Include 11 Informations scurit 123 Installation 5 mod_dav 155, 156 sous UNIX et Linux 6, 7 sous Windows 8 Inverse, proxy 184, 188, 191

K
KeepAliveTimeout 179 kill 32 killall 32

L
LanguagePriority 80 Langue affecter 80 par dfaut 80 Liaison impossible 35 Liens symboliques 175 Ligne de commande accs DAV 162 cadaver 162 sitecopy 164 tester 30 Limiter proxy 127 refus de service 180 Limites systme d'exploitation 171, 172 Liste de contrle de scurit 123 Listen 14, 141 Listing, dsactiver 115 LoadModule 17, 20, 155 LogFormat 46 LogLevel 27 logresolve 57 lsof 31

J
Jeux de caractres 80 Journal access_log 46 analyser 53 archiver 55 entres communes 60 erreurs 26, 40 error_log 46 fichier 46 fusion 58 personnalis 48 pour chaque hte 59 quantit d'informations 27 rediriger 49 requte inhabituelle 61 rotation 55 sparation 58 surveillance en temps rel 53 systme 27

INDEX

222

Manipulation des en-ttes

M
Manipulation des en-ttes 196 Mappage URL 64, 81 Masquage des serveurs d'arrire-guichet 192 Matriel, personnaliser 170 MaxRequestsPerChild 206 MaxSpareServers 206 Mcanisme d'acceptation 178 Mlange d'htes 94 Mthode 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 74 mod_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 52 mod_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 166 mod_vhost_alias 97 mod_virtualhost_alias 96 Modification de site Web 152 Modules activer 18 ajouter sans recompilation 19 Auth 145 authentification 120 bandwidth_share 182 dsactiver 18, 124 effacer la liste 18 hbergement virtuel 97 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 mod_deflate 185, 212 mod_dir 81 mod_filter 210 mod_ftp 211 mod_include 74 mod_log_spread 177 mod_nocase 83

INDEX

Performances

223

mod_perl 72 mod_proxy 197 mod_require_host 182 mod_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 182 mod_userdir 166 mod_vhost_alias 97 mod_virtualhost_alias 96 non compatible 35 rechercher 17 Robotcop 182, 183 Mot de passe cl 134 supprimer pour une cl 134 MPM 172, 203, 208 bas sur les processus 204 bas sur les threads 207 Event 208 Perchild 209 Prefork 205 slectionner 204 Worker 207 Multiview 78

O
Office, accs 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 vrifier le fonctionnement 31 vlogger 59 vmstat 170 Ouverture avec erreur 36

INDEX

P
Page par utilisateur 166 rediriger 65, 66 valider 84 Paire de cls 133 Paramtres HostnameLookups 178 PassEnv 75 Perchild 209 Performances amliorer 170, 193 CGI 72 RAM 170 SSL 143 systme de fichiers 174 vitesse du disque 170

N
NameVirtualHost 91 Navigateur, accs limit 119 Ngociation configurer 78 contenu 77, 177 netstat 31 noatime 175 Nom de serveur 16

224

Personnalisation

Personnalisation journal 48 matriel 170 refus d'accs 111 rseau 178 POP3 211 POP3Protocol On 212 Port 15 modifier 14 Pound 201 Prfrences client 77 Prefork 205 Problmes de casse 83 Processus externes contrler 173 MPM 204 Programme, excution restreinte 114 Protection de l'accs DAV 157 Protocole CGI 69 DAV 153 HTTPS 130 Proxy activer 189 de cache 197 en-ttes 196 HTTP transparents 201 inverse 184, 188, 191 limiter 127 ordinaire 188, 190 activer 190 Pound 201 Squid 201 URL 193 ProxyPass 191 ProxyPassReverse 192 ProxyRequests 190 ps 31 Publication contenu 20, 151

R
RAM, augmenter 170 Redmarrage automatique 57 du serveur 12 en douceur (graceful) 14 Redirect 65 Redirection chec 67 erreur 40 expression rgulire 66 journal 49 page 65, 66 RedirectMatch 66 Refus d'accs 37 personnaliser 111 de service 180 RemoveHandler 68 Rpertoire fichiers de configuration 98 listings 115 Rpertoire utilisateur 167 RequestHeader 197 Requte afficher le contenu 137 consignation conditionnelle 49 consigner 46 inhabituelle 61 signature 135 Require 105, 107 Rseau, personnaliser 178 Rsolution adresses IP 56 de nom 36 de problmes avec DAVLockDB 168 Ressources ( CGI excutables) 70 Restriction bande passante 181 connexions 181

INDEX

SSL

225

RLimitCPU 174 RLimitMem 174 RLimitNProc 174 Robotcop 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 rpertoires 120 VirtualHost 88, 89 Scurisation configuration de DAV 157 serveur 114 SSL 129 Scurit dsactiver les modules 124 informations 123 liste de contrle 123 Segmentation 38 Slection du MPM 204 Sparation des journaux 58 ServerName 16, 89 ServerRoot 11 ServerTokens 116 Serveur arrt 12 arrter 32 configuration minimale 140

connexion 41 dmarrage 12 dmarrage avec SSL 141 en-tte 116 erreur interne 38 limiter l'accs 127 redmarrage 12 redmarrage automatique 57 restreindre l'envoi de contenu 114 scurit 114 spcifier le nom 16 vrifier le fonctionnement 31 SetEnv 74 SetEnvIf 75 SetFilter 84 SetHandler 68 Signature afficher le contenu de la requte 137 requte 135 Site, modifier 152 sitecopy 164 SNMP 52 Squid 201 SSI 73 configurer 74 SSL 129 amliorer les performances 143 avertissement l'accs 146 certificat 130 compiler 140 contourner les bogues 149 contrle d'accs complexe 150 dcharger 195 desservir le contenu 144 et dmarrage 141 fonctionnement 130 htes virtuels 96 htes virtuels sur le nom 144 tester les sites 148

INDEX

226

SSLCryptoDevice

SSLCryptoDevice 144 SSLEngine 141 SSLPassPhraseDialog 142 SSLRequire 150 SSLVerifyClient 147 StartServers 205 status 200 stunnel 148 Suppression exemples de script 125 mot de passe d'une cl 134 Surveillance connexions 50 en temps rel 53 mod_status 51 SNMP 52 Symboliques, liens 175 SymLinksIfOwnerMatch 175 Syntaxe, erreur 34 Systme d'exploitation augmenter les limites 171, 172 modifier les limites 172 Systme de fichiers et noatime 175 Systme, journal 27

traceroute (tracert) 42 TransferLog 48 Type correspondances 79 MIME 68

U
ulimit 171 UnsetEnv 75 URL auto-rfrentielle 16 en proxy 193 mappage 64, 81 User 15, 126 Utilisateur autoriser 112 base de donnes 106 modifier 15 nombreux 108 page personnelle 166 rpertoires 167 Utilitaires htpasswd 106 kill 32 stunnel 148 tail 54 traceroute (tracert) 42

INDEX

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

V
Validation de pages 84 Variables d'environnement 74 accs 75 paramtrer 75 d'environnement spciales 76 Versions 4

Worker

227

VirtualDocumentRootIP 97 VirtualHost 88, 89 VirtualScriptAliasIP 97 Virtuel hbergement 87, 88 bas sur le nom 90 configurer 89, 91 modules 97 hte 96 configurer 92, 93 dboguer 95 vlogger 59 vmstat 170 Vol de bande passante 117

W
WebDAV 152, 153 et HTTP 154 Windows, accs DAV 159 Worker 207

INDEX

228

Worker

INDEX

LE GUIDE DE SURVIE

Apache
LESSENTIEL DU CODE ET DES COMMANDES
Ce Guide de survie est le compagnon indispensable pour ne jamais vous sentir perdu dans un environnement Apache. Vous y trouverez en un clin dil les principales commandes et lignes de code pour amener un serveur Web Apache rpondre vos besoins, que vous excutiez des domaines virtuels complexes desservant des millions de pages par jour ou un simple serveur de test tournant sur un portable.

CONCIS ET MANIABLE
Facile transporter, facile utiliser nis les livres encombrants !

PRATIQUE ET FONCTIONNEL
Plus de 100 fragments de code et commandes personnalisables pour grer efcacement un serveur Apache dans toutes les situations. Daniel Lopez est prsident et directeur technique de BitRock, une socit qui labore des outils dinstallation et de gestion multi-plateformes, en mettant laccent sur les produits open source. Cest lauteur du module Apache mod_mono et de loutil de conguration Comanche.
Niveau : Intermdiaire Catgorie : Web Conguration : Multi-plateforme

Pearson Education France 47 bis, rue des Vinaigriers 75010 Paris Tl. : 01 72 74 90 00 Fax : 01 42 05 22 17 www.pearson.fr

ISBN : 978-2-7440-4001-6