Académique Documents
Professionnel Documents
Culture Documents
LE GUIDE DE SURVIE
http://www.free-livres.com/
Apache
LESSENTIEL DU CODE ET DES COMMANDES
Apache
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
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.
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
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
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
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
XI
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.
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.
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
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
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.
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.
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 -
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.
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).
10
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
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.
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
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.
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").
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
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
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.
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.
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
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.
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.
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).
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
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>
19
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
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
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.
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.
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.
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.
27
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.
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.
29
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.
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.
31
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.
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.
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.
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.
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.
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>.
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.
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.
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 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).
39
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.
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
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.
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).
41
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.
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
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
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.
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
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).
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.
49
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.
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
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.
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.
51
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
53
54
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).
55
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
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.
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
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.
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
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.
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/.
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
Si vous ne voulez pas assurer le suivi des oprations d'un hte particulier, vous pouvez simplement employer : CustomLog /dev/null
61
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
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".
La directive AliasMatch prsente un comportement analogue Alias, mais elle permet de prciser une expression rgulire pour l'URL. Les correspondances peuvent tre
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.
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
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.
67
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.
Les gestionnaires permettent Apache de dterminer les actions raliser sur le contenu demand. Ce sont les modules qui proposent des gestionnaires ; Apache doit
68
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.
69
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.
70
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).
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>
71
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
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.
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
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.
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
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 :
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
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.
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
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.
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.
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
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.
81
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
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
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.
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.
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
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.
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
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.
88
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.
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.
89
Listen 8080 Listen 80 <VirtualHost 192.168.200.2> ServerName www.exemple.com DocumentRoot /usr/local/Apache/sites/exemple.com </VirtualHost>
90
<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>
91
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
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.
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
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>
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
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>
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
95
# 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
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
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.
98
Le Chapitre 11 traite de plusieurs modules de multitraitement (MPM), comme mod_perchild, qui permettent d'excuter diffrents htes virtuels sous divers identifiants utilisateur.
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.
99
La directive AccessFilename permet de fournir une liste de noms de fichiers qu'Apache tudiera, la recherche des fichiers de configuration par rpertoire.
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
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
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.
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
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).
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 !
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.
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
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
107
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
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.
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
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
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
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.
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.
111
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
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.
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.
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.
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
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.
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.
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
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.
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
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.
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
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).
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
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).
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
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
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.
123
124
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.
126
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.
127
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
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
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.
133
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.
134
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".
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
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.
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
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.
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/).
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.
138
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
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
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.
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
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
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).
143
144
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.
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://.
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.
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
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.
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
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.
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
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).
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
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
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
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.
154
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.
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.
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
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/.
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.
157
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
<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.
159
160
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).
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.
161
162
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).
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.
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:/>
164
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.
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).
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
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
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
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
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
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.
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.
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
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
173
de processus en modifiant l'entre max_nprocs et le nombre de processus autoriss pour un utilisateur donn, avec maxuproc.
Apache propose plusieurs directives pour contrler la quantit de ressources utilises par les processus externes.
174
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.
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.
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
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.
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.
177
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
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).
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
(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.
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
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.
182
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/.
183
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
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.
185
186
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
189
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.
190
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.
191
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
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/.
193
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.
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
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.
195
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
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.
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.
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.
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
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.
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.
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.
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
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.
202
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
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.
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).
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
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.
207
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
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
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.
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
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.
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
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.
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
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/.
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.
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
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
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
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