Daniel Lopez

LE GUIDE DE SURVIE

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

Apache
L’ESSENTIEL DU CODE ET DES COMMANDES

Apache

Daniel Lopez Jesus Blanco

CampusPress a apporté le plus grand soin à la réalisation de ce livre afin de vous fournir une information complète et fiable. Cependant, CampusPress n’assume de responsabilités, ni pour son utilisation, ni pour les contrefaçons de brevets ou atteintes aux droits de tierces personnes qui pourraient résulter de cette utilisation. Les exemples ou les programmes présents dans cet ouvrage sont fournis pour illustrer les descriptions théoriques. Ils ne sont en aucun cas destinés à une utilisation commerciale ou professionnelle. CampusPress ne pourra en aucun cas être tenu pour responsable des préjudices ou dommages de quelque nature que ce soit pouvant résulter de l’utilisation de ces exemples ou programmes.

Tous les noms de produits ou autres marques cités dans ce livre sont des marques déposées par leurs propriétaires respectifs.

Publié par CampusPress 47 bis, rue des Vinaigriers 75010 PARIS Tél : 01 72 74 90 00 Réalisation PAO : Léa 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 l’américain par : Nathalie Le Guillou de Penanros ISBN original : 0-672-32836-4 Copyright © 2006 by Sams Publishing www.samspublishing.com Tous droits réservés Sams Publishing 800 East 96th, Indianapolis, Indiana 46240 USA

Tous droits réservés

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. Aucune représentation ou reproduction, même partielle, autre que celles prévues à l’article L. 122-5 2˚ et 3˚ a) du code de la propriété intellectuelle ne peut être faite sans l’autorisation expresse de Pearson Education France ou, le cas échéant, sans le respect des modalités prévues à l’article L. 122-10 dudit code.

Table des matières
Introduction 1 Les bases d'Apache Découverte d'Apache Pour savoir si Apache est déjà installé Installation d'Apache 1.3 sous Linux et UNIX Installation d'Apache 2.0 sous Linux et UNIX Installation d'Apache sous Windows Configuration de base des fichiers Utilisation de plusieurs fichiers de configuration Démarrage, arrêt et redémarrage d'Apache Modification de l'adresse et du port utilisés par Apache Modification de l'utilisateur Apache Spécification d'un nom de serveur Création d'une icône pour "Ma page Web" Découverte des modules disponibles sur le serveur Activation et désactivation de modules individuels Ajout de modules après la compilation d'Apache sans recompilation Publication de contenu 2 Dépannage A l'aide ! Mon serveur Apache ne fonctionne pas ! Le journal d'erreurs Connexion au démon du journal système Contrôle de la quantité des informations consignées Test de la configuration Apache à la recherche de problèmes Test d'Apache à partir de la ligne de commande 1 3 3 5 6 7 8 9 11 12 14 15 16 16 17 18 19 20 25 25 26 27 27 29 29

IV APACHE Vérification du fonctionnement d'Apache Autres manières d'arrêter Apache Utilisation d'Apache… pour déboguer Apache Erreurs de démarrage Erreurs de refus d'accès Erreurs internes au serveur Autres fichiers pour la journalisation des erreurs Les redirections ne fonctionnent pas Liste de vérification pour le dépannage Si tout le reste a échoué 3 Journaux et surveillance Introduction à la consignation des erreurs dans Apache Fichiers journaux Apache par défaut Création des formats de journaux Création d'un fichier journal personnalisé Redirection des journaux vers un programme externe Consignation conditionnelle de requêtes 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 réel Consignation des requêtes dans une base de données Rotation et archivage des journaux Contrôle de la résolution des adresses IP Traitement d'adresses IP consignées Redémarrage automatique d'Apache en cas de panne Fusion et séparation de fichiers journaux Conservation de fichiers séparés pour chaque hôte virtuel Entrées de journaux communes 31 32 33 34 37 38 40 40 41 44 45 45 46 46 48 49 49 50 51 52 53 53 54 55 56 56 57 58 59 60 .

Table des matières V 4 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 dernière version d'un fichier Echec de la redirection ou requêtes non autorisées Définition des gestionnaires de contenu Les types MIME Configuration des types MIME Les bases de l'exécution des scripts CGI Désignation de ressources comme des CGI exécutables Association de scripts à des méthodes HTTP et des types MIME Dépannage relatif à l'exécution des scripts CGI Amélioration des performances du script CGI SSI Configuration de SSI Paramétrage des variables d'environnement Paramétrage dynamique des variables d'environnement Variables d'environnement spéciales Négociation du contenu Configuration de la négociation du contenu Affectation de jeux de caractères par défaut et de priorités de langue Mappage avancé d'URL avec mod_rewrite Problème de l'oubli de la barre oblique finale Correction des fautes de frappe Résolution des problèmes 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 5 Hébergement virtuel Définition de l'hébergement virtuel Hébergement virtuel basé sur IP Configuration de l'hébergement virtuel basé sur IP Hébergement virtuel basé sur le nom Configuration de l'hébergement virtuel basé sur le nom Que se passe-t-il si une requête ne correspond à aucun hôte virtuel ? Mélange d'hôtes basés sur IP et basés sur le nom Débogage des configurations d'hôtes virtuels Utilisation de SSL avec des hôtes virtuels basés 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 6 Sécurité et contrôle d'accès Le contrôle d'accès. une exigence ? Différences existant entre les versions d'Apache L'authentification basique et digest Présentation du contrôle d'accès Apache Configuration des autorisations et des authentifications Apache Création d'une base de données utilisateur Emploi de Require pour autoriser des utilisateurs et des groupes Gestion d'un grand nombre d'utilisateurs Autorisation d'accès à des adresses IP spécifiques uniquement Refuser l'accès à des adresses IP spécifiques Combinaison des méthodes de contrôle d'accès Personnalisation de la page de refus d'accès Donner le pouvoir aux utilisateurs Refus d'accès aux fichiers système et sensibles Restriction d'exécution de programmes Eviter les abus .

Table des matières VII Désactivation des listings de répertoire 115 Modification de l'en-tête Server: 116 Empêcher le vol de vos images (hotlinking) 117 Restriction de méthodes HTTP spécifiques 118 Restriction d'accès basée sur le type du navigateur 119 Utilisation des sections d'emplacement et de répertoire 120 Autres modules d'authentification 120 Apache 2.x 129 129 130 131 132 133 133 134 134 135 137 137 138 140 .3 Compilation de la prise en charge SSL dans Apache 2.2 122 Mise à jour de la sécurité Apache 123 Liste de contrôle de sécurité 123 Désactiver les modules inutiles 124 Suppression des échantillons de script 125 Restreindre ou désactiver l'exécution de CGI et de SSI 125 Vérifier les autorisations de fichiers 126 Limiter ou désactiver la fonctionnalité de proxy 127 Restreindre l'accès à votre serveur par défaut 127 7 SSL et TLS Définition de SSL Fonctionnement de SSL Compilation d'OpenSSL Clés de cryptage Création d'une paire de clés Création d'une paire de clés protégées par mot de passe Suppression du mot de passe d'une clé Certificats Création d'une requête de signature de certificat Affichage du contenu d'une requête de signature de certificat Création d'un certificat autosigné Compilation de la prise en charge SSL dans Apache 1.

VIII APACHE Configuration minimale d'Apache Démarrage d'Apache avec prise en charge SSL SSLPassPhraseDialog Amélioration des performances SSL Forcer le contenu à être desservi par SSL SSL et hôtes virtuels SSL basés sur le nom Utilisation des modules Auth d'Apache avec SSL Messages d'avertissement lors de l'accès à un site Web activé par SSL Création de certificats client Authentification à l'aide des certificats client Alternatives à mod_ssl Test de sites Web activés par SSL à partir de la ligne de commande Contourner les implémentations SSL présentant des bogues Contrôle d'accès complexe avec mod_ssl Chapitres annexes 8 Publication de contenu avec DAV Apache et la publication de contenu Présentation 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 Sécurisation de votre configuration WebDAV Accès aux ressources DAV depuis Microsoft Office Accès aux ressources DAV depuis Microsoft Windows Accès aux ressources DAV depuis Firefox Accès à 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 .

2.Table des matières IX Gestion des clients présentant des bogues mod_speling et DAV Contenu dynamique et DAV Activation des pages par utilisateur Autres répertoires utilisateur Résolution des problèmes avec DAVLockDB 9 Performances et évolutivité Personnalisation d'Apache Les performances et l'évolutivité Personnalisation du matériel Elargissement des limites du système d'exploitation Elargissement des limites du système d'exploitation sur les processus Augmentation des descripteurs de fichiers du système d'exploitation Contrôle des processus externes Amélioration des performances du système de fichiers Gestion de liens symboliques Personnalisation du réseau et des paramètres de statut Eviter les abus Restriction des connexions et de la bande passante Gestion des robots Proxy inverses et systèmes d'équilibrage des charges Mise en cache et compression Optimisations spécifiques 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 Différences entre Apache 1.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 .3.0 et 2.

X 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'arrière-guichet Eviter l'inversion des URL en proxy Amélioration des performances Déchargement du processus SSL Transfert des informations de proxy dans les en-têtes Manipulation des en-têtes Implémentation 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 Sélection d'un module multitraitement Découverte des MPM basés sur les processus Configuration de MPM Prefork MPM basés 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 volée 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 .

. Il a écrit plusieurs guides populaires sur Apache et Linux. Il a fait partie de la première équipe d'ingénieurs de Covalent Technologies. un outil de configuration de GUI pour Apache. en France. Jesus Blanco est responsable de projets auprès de la société BitRock. dont il a traduit une grande partie en espagnol. ApacheCon et la Convention Open Source O'Reilly. Il est également l'auteur du module Apache mod_mono pour l'intégration d'Apache et de . précédemment citée. Il possède un master en télécommunications de la Escuela Superior de Ingenieros de Séville et du Danmarks Tekniske Universitet. Inc. qui propose des services et une assistance logicielle Apache aux entreprises.A propos des auteurs XI A propos des auteurs Daniel Lopez est le fondateur de la société BitRock qui élabore des outils d'installation et de gestion multiplates-formes pour divers logiciels commerciaux et Open Source. Jesus Blanco a participé au projet de documentation Apache. Il a travaillé pour le Spanish Institute of Foreign Commerce.NET. ainsi que de Comanche. comme LinuxWorld. Il y occupe actuellement le poste de directeur technique. au Portugal et en Asie du Sud-Est. Il a obtenu un diplôme d'administration des affaires (université de Séville) et un master en informatique (UNED). ce qui l'a conduit à exercer ses talents au Brésil. Daniel Lopez intervient régulièrement dans des conférences sur l'Open Source. Il est d'autre part membre de l'Apache Software Foundation. en Allemagne. .

.

depuis ses débuts modestes où il n'était qu'un fork. Ce livre vous servira également d'aide-mémoire pratique pour les tâches les plus fréquentes. ce Guide de survie Apache vous sera d'un grand secours pour configurer vos serveurs Web. une "bifurcation" du serveur NCSA. De la même façon qu'un guide linguistique se révèle un compagnon précieux pour qui voyage à l'étranger. . à tel point que son approche peut se révéler très intimidante pour les novices. ses capacités ont augmenté autant que sa complexité. L'objectif de cet ouvrage est de vous aider à naviguer parmi les centaines d'options du produit. Le Guide de survie Apache propose des conseils et des extraits de code qui vous aideront à personnaliser Apache. afin que celui-ci réponde à vos besoins particuliers.Introduction Apache s'est toujours trouvé au cœur du Web. Sachez toutefois que cet ouvrage ne couvre pas tous les aspects de ce très vaste sujet. jusqu'à sa dernière version qui regorge de fonctions. Au fil du temps.

.

x). Voici ses principales caractéristiques : b Portable.3 et 2. selon Netcraft (http://www. Apache est actuellement le serveur Web le plus populaire sur Internet. ainsi que de la structure et de la syntaxe des fichiers de configuration du serveur. Nous parlerons de la mise en forme des fichiers de serveur. à arrêter. Vous apprendrez également ici à démarrer.1 Les bases d'Apache Découverte d'Apache Ce chapitre propose une introduction rapide au serveur Web Apache. Nous expliquerons comment télécharger et compiler Apache à partir de la source ou à l'aide de packages binaires et comment activer ou désactiver les modules communs. Mac OS X. puis à redémarrer Apache. .netcraft. Nous examinerons son architecture. vous pourrez modifier la configuration minimale nécessaires pour faire fonctionner le serveur comme vous le souhaitez. Apache s'exécute sous Linux.com). ainsi que les différences qui existent entre ses principales versions (1. Windows. Enfin. Avec près de 68 % de parts de marché. ainsi que d'autres systèmes d'exploitation.

En revanche. Son architecture étant modulaire et extensible.x dans les cas suivants : b Vous disposez d'un système d'exploitation Windows. b Vous devez desservir une grande quantité de contenu statique qui pourrait bénéficier d'un module de traitement en threads sous UNIX.0). Il existe deux versions principales d'Apache. La disponibilité du code source vous permet d'en créer des versions personnalisées.3 . En règle générale.0 avec le MPM Prefork). b Vous avez besoin de l'une de ses nouvelles fonctionnalités (non disponible dans Apache 2. dont les extensions ne sont pas compatibles avec les threads ou processus légers (bien qu'un même code s'exécutera probablement de façon satisfaisante sous Apache 2. il est toutefois incompatible avec tous les modules écrits pour cette précédente mouture.3 dans les cas suivants : b Vous avez besoin d'exécuter des modules internes ou tiers n'ayant pas été adaptés à Apache 2. largement utilisées aujourd'hui : la série 1. b Open Source.x.3 et n'avez pas de besoins spécifiques de mise à niveau.0 propose certaines améliorations et fonctionnalités qui faisaient défaut à la version 1. b Vous devez exécuter un logiciel.4 CHAPITRE 1 Les bases d'Apache b Flexible. . par exemple PHP.x. b Vous connaissez déjà Apache 1. Vous pouvez télécharger et utiliser Apache gratuitement.3 et la série 2. Apache peut être configuré de diverses manières. b Vous ne connaissez pas du tout Apache. Apache 2. vous utiliserez Apache 2. vous opterez pour Apache 1.

pour savoir si Apache est installé. en recourant à l'une des commandes suivantes : httpd –v /usr/sbin/httpd -v Si la réponse est positive. car les distributions n'adoptent pas toutes le même nom de package. Avec la plupart des systèmes de type UNIX. tapez les commandes qui précèdent pour le vérifier. accédez à la partie Ajout/Suppression de programmes du Panneau de configuration. Si votre distribution fait appel au système de gestion de package rpm.Pour savoir si Apache est déjà installé 5 Pour savoir si Apache est déjà installé rpm –q httpd rpm –q apache rpm –q apache2 Si vous utilisez un système Linux.54 Server built: Apr 16 2005 14:25:31 Vous obtiendrez une réponse encore plus détaillée avec cette commande : httpd -V Sur les systèmes Windows. vous pouvez aussi vérifier directement que le binaire Apache est installé. notamment Mac OS X. le résultat renvoyé ressemblera à ceci : Server version: Apache/2. Il existe des commandes différentes. Le chemin d'installation est le suivant : C:\Program Files\Apache Group . Apache est certainement déjà installé.0.

Dans cet ouvrage. lorsque nous ferons référence à une fonctionnalité spécifique de la version 1.33. notamment Windows. nous supposerons que vous avez installé la version Apache 1.33 . sur le site Web officiel d'Apache. Vous pouvez télécharger les binaires et le source pour diverses plates-formes.apache.org et à télécharger l'archive tar du source approprié.3.33. La première étape consiste à vous rendre sur le site Web http://httpd. Il s'agit en fait de la version la plus récente de la série 1.3 sous Linux et UNIX tar xvfz apache_1.tar.3 à l'heure où nous rédigeons ces lignes.3./configure --prefix=/usr/local/apache --enable-shared=max make make install Vous pouvez utiliser les outils de gestion de package de votre système d'exploitation pour installer des versions pré-implantées du serveur. de créer un serveur personnalisé selon les besoins ou bien d'appliquer rapidement des correctifs de sécurité dès leur publication. car elle s'intègre bien avec le système de fichiers existant ou d'autres packages fournis par des tiers. Apache est présent dans la plupart des versions de Linux et dans Mac OS X.3. Cela permet.33.gz cd apache_1.gz.apachefrance.tar. L'archive tar du source s'intitule apache_1. à l'adresse http://www. .3. Il est toutefois important de savoir construire sa propre version d'Apache à partir du code source.3. Cette solution est souvent préférable. Installation d'Apache 1. par exemple.6 CHAPITRE 1 Les bases d'Apache Pour se procurer Apache Par défaut.com.

vous pouvez effectuer l'une des opérations suivantes sur la plupart des systèmes Linux modernes : bunzip2 < apache_1. nécessaire pour prolonger ou personnaliser les fonctionnalités par la suite.gz cd apache_2.3. compiler et installer Apache en appliquant les commandes du listing précédent.tar. ce format permet de réduire la taille des fichiers de distribution ./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=most make make install Ce processus est analogue à celui décrit précédemment pour la version 1.54 .bz2 Installation d'Apache 2. Info Certaines versions d'Apache se terminent par . .tar.54.Installation d'Apache 2.tar. il est désormais fréquemment utilisé dans de nombreux projets Open Source.0. configurer. Cela signifie qu'elles ont été compressées à l'aide de l'outil bzip2. Bien qu'il soit plus lent à compresser et à décompresser.0 sous Linux et UNIX tar xvfz apache_2.bz2 | tar xvf - tar xvfj apache_1.3. sans avoir à recompiler le serveur. même si les options d'activation de prise en charge des modules chargeables sont différentes.3.0. Pour décompresser ce type de fichier. --enable-shared=max active la prise en charge du module chargeable.33.33.tar.bz2.0 sous Linux et UNIX 7 Vous pouvez maintenant décompresser. L'option .-prefix indique le chemin sous lequel doit être installé le serveur.

ainsi que d'autres informations : b le nom de domaine du réseau . b le nom de domaine totalement qualifié du serveur . Il vous suffit de télécharger le package. vous pourrez toujours relancer Apache à partir de la ligne de commande. par exemple si Apache doit s'exécuter à chaque démarrage du serveur. Cette option est utile.x.apache. Vous aurez également la possibilité d'exécuter Apache sous forme de service. puis de lancer l'installation du binaire.3 et 2. L'assistant vous demande ensuite où installer le serveur. afin que vos visiteurs sachent qui contacter en cas de problème. Le nom du serveur est celui utilisé par vos clients pour accéder à votre serveur. b l'adresse e-mail de l'administrateur. L'adresse e-mail sera affichée dans les messages d'erreur. à l'adresse http://httpd.8 CHAPITRE 1 Les bases d'Apache Installation d'Apache sous Windows L'installation d'Apache sous Windows est encore plus simple que sous UNIX. Dans les autres cas. Le processus est quasiment identique pour Apache 1. .org.

0 à fournir le contenu principal du site www.exemple. . Vous utiliserez alors un proxy inverse (voir Chapitre 10). Il est également possible de disposer de plusieurs serveurs. chacun desservant une partie séparée d'un site Web. Il suffit simplement de choisir des préfixes d'installation différents. par exemple.com et déléguer le contenu de www. Un seul serveur Apache peut suffire.1 indique l'emplacement par défaut du principal fichier de configuration Apache sous divers systèmes d'exploitation. et les raisons de le faire sont nombreuses. attribuez-leur des combinaisons d'adresses et de ports différentes. grâce à la fonction d'hôte virtuel (voir Chapitre 5).3 et 2 du serveur devront coexister côte à côte. le nom du fichier peut différer pour chaque version. Configuration de base des fichiers Le Tableau 1. amener un serveur Apache 2. Puisque dans certains cas les versions 1.exemple.com/connexion à un serveur Apache 1. Souvenez-vous qu'il n'est pas obligatoire d'installer plusieurs serveurs Apache pour exécuter plusieurs sites Web. vous pouvez installer un serveur Apache 1.Configuration de base des fichiers 9 Est-il possible d'installer différentes versions d'Apache sur la même machine ? Oui. Pour exécuter les serveurs simultanément. cela est tout à fait possible.3 exécutant une application mod_perl existante.3 sous /usr/local/apache et une version 2. Vous pouvez.0 sous /usr/local/apache2. par exemple. Ainsi.

et selon que vous ayez compilé Apache à partir du code source ou utilisé le binaire fourni par votre distribution.conf. Apache utilise. comme indiqué précédemment dans ce chapitre.conf Newer Red.conf c:\Program Files\Apache Group\Apache2\conf\ httpd. Mandrake. Ceux-ci peuvent contenir des directives et des sections.conf Mac OS X Le principal fichier de configuration Apache est appelé httpd.1.1.conf /usr/local/apache2/conf /usr/local/apache/conf Lors de la compilation à partir du source. Windows c:\Program Files\Apache Group\Apache2\conf\ httpd. systèmes /etc/httpd/conf/httpd. Pour y placer des commentaires. pour sa configuration. des fichiers en texte brut.conf Suse. d'autre part.conf sur différents systèmes Emplacement du fichier de configuration Plate-forme /etc/httpd/httpd.conf systèmes Red Hat.10 CHAPITRE 1 Les bases d'Apache Tableau 1.conf /private/etc/httpd/ httpd. Emplacement du fichier httpd. Vous trouverez des suggestions d'emplacements au Tableau 1. Fedora Core /etc/httpd/conf/httpd2. anciens /etc/httpd/httpd2. faites-les précéder . Son emplacement varie selon que vous utilisiez Windows ou Linux d'une part.

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). aux requêtes desservies par un hôte virtuel particulier. la racine du serveur est /usr/local/apache ou /usr/local/apache2.conf Include siteconf/ Il est quelquefois utile de répartir la configuration du serveur dans plusieurs fichiers. tous les fichiers d'un répertoire particulier ou les fichiers correspondant à un certain motif (nous le voyons dans ces exemples). il sera considéré comme étant relatif au chemin spécifié par la directive ServerRoot.conf Include conf.d/*. Vous pouvez modifier la valeur par défaut avec la directive ServerRoot. Si un chemin relatif est indiqué. Vous pouvez en placer dans des sections.Utilisation de plusieurs fichiers de configuration 11 du signe dièse (#) au début de la ligne (ils seront ignorés par Apache). Utilisation de plusieurs fichiers de configuration Include /etc/httpd/conf/perl. si vous avez installé Apache à partir de la source (voir précédemment). de sorte qu'elles ne s'appliquent qu'au contenu desservi par un répertoire ou un emplacement particulier. par exemple. La directive Include permet d'inclure des fichiers individuels. Ainsi. etc. Les directives gèrent tous les aspects du serveur. Sachez également qu'une directive peut s'étendre sur plusieurs lignes à condition de terminer la ligne précédente par une barre oblique inversée (\).

arrêt et redémarrage d'Apache apachectl apachectl apachectl apachectl start stop restart graceful Pour démarrer. si Apache se connecte à un port privilégié (ceux compris entre 1 et 1 024). vous devrez peut-être fournir un chemin absolu pour apachectl. Pour cela. Chacun de ces packages peut placer son propre fichier de configuration dans un répertoire spécifique où Apache ira le chercher directement. envoyer un signal de redémarrage ou réaliser un redémarrage "en douceur" (dit "graceful"). puis redémarrer le serveur. vous aurez besoin de privilèges racine pour démarrer le serveur. vous pouvez émettre n'importe laquelle de ces commandes. comme /usr/sbin/apachectl ou /usr/local/apache/bin/apachectl. Même s'il est possible de contrôler directement Apache sous UNIX à l'aide du binaire httpd. tels que les RPM. . Sous UNIX. nous recommandons l'outil apachectl. Démarrage. Si vous modifiez les fichiers de configuration. il faut le signaler à Apache. de sorte que ces modifications soient prises en compte. il englobe les fonctionnalités communes dans un script simple à utiliser. Selon votre installation. Le programme de prise en charge apachectl est distribué dans le cadre d'Apache . vous pouvez arrêter.12 CHAPITRE 1 Les bases d'Apache Cela survient généralement avec les distributions Linux qui concernent des modules Apache. arrêter ou redémarrer Apache.

arrêt et redémarrage d'Apache 13 Apache relira alors sa configuration. Apache 2. à l'aide de l'exécutable apache.exe -k stop Vous avez accès à des raccourcis de ces commandes dans les entrées du menu Start que crée le système d'installation d'Apache. vous pouvez le démarrer ou l'arrêter à l'aide des outils de gestion du service de Windows. .0 est en outre capable de placer un programme. sélectionnez Outils d'administration. puis cliquez sur l'icône Services.Démarrage. au Chapitre 2. Il s'agit d'une simple interface graphique utilisateur pouvant servir à démarrer et à arrêter le serveur directement ou sous forme de service. Sous Windows. Si vous avez installé Apache en tant que service. mais vous pouvez aussi le lancer à partir de l'entrée Apache du menu Démarrer.exe -k graceful apache. vous pouvez informer Apache directement. vous pouvez employer la commande kill pour envoyer directement des signaux au processus Apache parent. dans la barre des tâches. consultez la section suivante. Ce programme est installé au démarrage. Pour connaître la différence entre un redémarrage ordinaire et un redémarrage "en douceur". Nous verrons cela en détail à la section "Autres méthodes pour arrêter Apache".exe -k restart apache.exe : apache. Apache Monitor. comme suit : dans le Panneau de configuration. Outre l'utilisation du script apachectl.

Apache écoute les requêtes du port 81 et de l'adresse IP 192.200. Un redémarrage normal peut donc entraîner une interruption momentanée du service.200. Un redémarrage "en douceur" ("graceful") adopte une approche différente. il est arrêté et remplacé par un nouveau thread (ou processus) contenant la nouvelle configuration. Plusieurs directives Listen peuvent permettre de préciser différents ports et adresses IP à écouter. Cela assure l'homogénéité de fonctionnement du serveur Web.14 CHAPITRE 1 Les bases d'Apache Qu'est-ce qu'un redémarrage "en douceur" ? Un redémarrage "ordinaire" arrête le serveur Apache. Dans cet exemple. puis le relance. Vous pouvez les préciser à l'aide de la directive Listen. une adresse IP. .exe –k graceful Modification de l'adresse et du port utilisés par Apache Listen 192. En conséquence. en option. Chaque thread (ou processus) desservant un client continue à traiter la requête en cours. sans qu'il y ait interruption. puis celles du port 8080 à toutes les adresses disponibles.168. Une fois cela terminé. les requêtes en cours sont abandonnées et aucune nouvelle requête n'est desservie tant que le serveur est à l'arrêt. La manière la plus pratique de réaliser un redémarrage "en douceur" sous UNIX consiste à émettre la commande suivante : # apachectl graceful Sous Windows. Apache écoute toutes les adresses disponibles.4.168.4:80 Listen 8080 Apache doit connaître l'adresse IP et le port à écouter pour les requêtes entrantes. utilisez : Apache. Si aucune adresse IP n'est spécifiée. Celle-ci prend un port à écouter et.

mais si une directive Listen est spécifiée. La configuration est plus importante quand vous devez supporter des hôtes virtuels fondés sur des noms.Modification de l'utilisateur Apache 15 Vous pouvez également utiliser la directive Port pour préciser le port qu'Apache doit écouter. Quand Apache est exécuté sous forme de racine. Pour plus de détail. Port n'aura aucun effet. car un problème de configuration ou de programmation peut exposer la totalité du serveur. appelée BindAddress. voyez le Chapitre 5. Modification de l'utilisateur Apache User nobody Group nobody Vous pouvez préciser le groupe et l'utilisateur sous lesquels s'exécute Apache.3 propose une directive annexe. Pour des raisons de sécurité. Outre Listen. il réalise toutes les actions nécessitant des privilèges de superutilisateur (comme la liaison au port 80) et dessert les requêtes réelles que l'utilisateur et le groupe ont spécifiées dans la configuration Apache. nous déconseillons son emploi. Les privilèges et capacités de l'ID utilisateur sont généralement réduits. grâce aux directives User et Group. . Celle-ci étant devenue obsolète. Apache 1. Reportez-vous au Chapitre 4 pour en savoir plus sur la directive Port employée pour construire des URL autoréférentielles. il est déconseillé d'exécuter n'importe quel serveur sous forme de racine.

ico vers le répertoire contenant des documents porteurs de signets.exemple. on utilise le domaine spécifié avec la directive ServerName. Il est parfois nécessaire. . par exemple. de rediriger une requête vers une autre page ou d'afficher l'adresse du site Web à la fin d'une page d'erreur. Si aucun nom de serveur n'est spécifié.16 CHAPITRE 1 Les bases d'Apache Spécification d'un nom de serveur ServerName www.com Dans certains cas. Apache doit construire des URL autoréférentielles. Apache tente d'en trouver un valide en réalisant une recherche DNS inversée sur l'adresse IP du serveur. Si le serveur DNS n'est pas correctement configuré. Création d'une icône pour "Ma page Web" AliasMatch /favicon.ico représente une icône au format Windows.ico De nombreux navigateurs récents. Il s'agit d'URL qui font référence au serveur lui-même. l'opération peut être longue . l'auteur de la demande devra patienter un certain temps.ico/usr/local/apache2/icons/site. Mozilla et Konqueror vous permettent d'associer une icône à un signet. notamment Internet Explorer. Le fichier favicon. Reportez-vous au Chapitre 2 pour en savoir plus sur l'utilisation des directives UseCanonicalName et Port destinées à contrôler ce comportement. Quand vous placez un signet sur une page. le navigateur demande un fichier favicon. Par défaut.

y compris ceux chargés au moment de l'exécution.1/2.3).c Si vous avez compilé Apache avec une prise en charge de module chargeable.c prefork.Découverte des modules disponibles sur le serveur 17 Vous pouvez utiliser la directive AliasMatch pour rediriger toutes les requêtes de fichiers favicon. vous devrez étudier le fichier httpd.c mod_so. car httpd -M répertorie tous les modules.x) ou libexec/ (Apache 1. Pour voir les modules partagés chargés dans le serveur au moment de l'exécution. Cela n'est pas nécessaire avec Apache 2. Découverte des modules disponibles sur le serveur # httpd -l Cette commande répertorie les modules compilés dans votre binaire de serveur .ico vers un seul emplacement contenant l'icône de votre site (nous le voyons dans cet exemple). elle doit renvoyer un résultat analogue à ceci : Compiled in modules: core. . vos modules seront intégrés sous forme de bibliothèques partagées et placés par défaut dans un répertoire nommé modules/ (Apache 2.conf et rechercher les directives LoadModule appropriées.2.c http_core.

. Si votre serveur a été compilé avec une prise en charge de module chargeable.. n'oubliez pas de le supprimer des directives du fichier httpd.3. Si vous désactivez un module. La fonctionnalité prévue par ClearModuleList n'est pas disponible dans Apache 2.c> ExtendedStatus On </ifModule> . à l'aide d'une directive ClearModuleList./configure (.so Sous Apache 1..18 CHAPITRE 1 Les bases d'Apache Activation et désactivation de modules individuels ./configure (.. à l'aide des options --enable-module et --disable-module de la commande configure. vous pouvez effacer la liste des modules actifs.x. notamment ceux compilés.conf qu'il apporte ou de l'inclure dans une section <ifModule> (comme indiqué).) --enable-status . L'exemple précédent explique le fonctionnement du module mod_status distribué dans le cadre d'Apache. vous pouvez désactiver un module en transformant simplement en commentaire la ligne qui charge le module d'un serveur : #LoadModule mod_status modules/mod_status. Vous devrez ensuite employer une directive AddModule pour chaque module à utiliser. faute de quoi le serveur risque de ne pas démarrer : <ifModule mod_status.) --disable-status Vous pouvez activer ou désactiver des modules individuels au moment de la compilation.

apxs peut gérer tout cela automatiquement. Pour des modules tiers plus complexes.c Une fois que le module est compilé. vous pouvez ajouter des modules à Apache sans recompiler. il existe généralement des commutateurs --with-apxs ou --with-apxs2 à transférer dans le script de configuration.c Eh oui.c Cette approche fonctionne pour les modules simples. tels que ceux inclus dans la distribution Apache. Pour savoir si c'est le cas. puis de taper : # apxs –c mod_usertrack. comme PHP. inutile d'entreprendre ces étapes liées à apxs. mais uniquement si mod_so est déjà compilé dans votre serveur. un outil permettant de construire et d'installer des modules d'extension inclus par défaut dans Apache. Si vous possédez une version binaire du module disponible. il faut le copier dans le répertoire des modules Apache et modifier le fichier de configuration. grâce à cette ligne de code : # apxs –cia mod_usertrack. Cela vaut en particulier si vous avez déjà compilé de nombreux . Pour compiler et installer un module avec apxs. consultez la section "Découverte des modules disponibles sur le serveur". Vous pouvez construire un module à partir des sources. à l'aide d'apxs.Ajout de modules après la compilation d'Apache sans recompilation 19 Ajout de modules après la compilation d'Apache sans recompilation # apxs –cia mod_usertrack. il suffit de passer du répertoire courant à celui qui contient le module.

par exemple. . celui-ci sera accessible de l'extérieur par l'adresse suivante : http://www. si vous créez un répertoire. en ajoutant les lignes suivantes à votre fichier httpd. et que vous y placez le fichier bar.3. il suffira d'ajouter la directive LoadModule.com/foo/bar. historiquement. nommé foo. Vous pouvez y placer des documents qui apparaîtront automatiquement dans l'espace URL du document. Publication de contenu DocumentRoot /usr/local/apache/htdocs Par défaut. Si vous utilisez Apache 1. Ainsi.2. dans htdocs.c Avec Apache 2.exemple.conf : LoadModule usertrack_module libexec/mod_usertrack.20 CHAPITRE 1 Les bases d'Apache modules optionnels lors de la construction du serveur ou si le module est déjà fourni dans le cadre de votre distribution Linux ou de votre package d'installation Windows. dans le répertoire dans lequel sont installés par défaut les modules chargeables. Si un chemin relatif est précisé.so AddModule mod_usertrack.html.html Vous pouvez modifier l'emplacement du répertoire de documents à l'aide d'une directive DocumentRoot. signifie "document html") dans le répertoire d'installation. il sera considéré comme étant relatif au chemin spécifié par la directive ServerRoot. Apache dessert un contenu à partir du répertoire htdocs/ (qui. vous pouvez ajouter le nouveau module au serveur. comme indiqué. ici avec modules/ au lieu de libexec/.

.(gif|jpg)"> .. sortes de conteneurs de directives.html"> . consultez le Chapitre 4. </Location> <FilesMatch "\.. limitent la portée d'application des directives. </Directory> <Location "/downloads/*. Apache propose en effet plusieurs mécanismes puissants et flexibles pour faire correspondre les URL demandées par les clients avec des fichiers présents sur des disques ou des ressources fournies par des modules. cela signifie qu'elles concernent l'ensemble du serveur par défaut (configuration du serveur) et s'y appliquent : <Directory "/usr/local/apache/htdocs"> .Publication de contenu 21 Il n'est pas obligatoire de placer le contenu dans le répertoire racine des documents.. Si les directives ne se trouvent pas dans une section. </FilesMatch> . Sections Les sections... Pour plus de détails.

<Directory> et <DirectoryMatch>. . Elles sont semblables aux sections Directory. Les expressions régulières sont des chaînes qui décrivent un jeu de chaînes ou y correspondent. peuvent fournir leurs propres sections (voir Chapitre 10). en fonction de certaines règles de syntaxe. Directive qui spécifie un serveur vir- tuel. La section <DirectoryMatch> permet d'utiliser des motifs d'expressions régulières comme arguments. Files et Location peuvent aussi prendre des expressions régulières comme arguments à condition de les faire précéder d'un signe ~. Appliquent des directives à certaines URL ou à certains motifs d'URL demandés. Sachez qu'il est possible d'héberger différents sites Web à l'aide d'une seule installation Apache (voir Chapitre 5). comme mod_proxy. <Files> et <FilesMatch>. Consultez également le Chapitre 8 pour en savoir plus sur les sections qui restreignent l'accès en fonction des méthodes http. Info Les sections Directory. Ces sections appliquent des directives à un répertoire (ou groupe de répertoires) donné dans le système de fichiers. Des modules. Identiques aux conteneurs Directory et Location. Ces sections ne sont pas les seules disponibles. les sections Files appliquent des directives à certains fichiers ou motifs de fichiers.22 CHAPITRE 1 Les bases d'Apache Sections de directives Apache par défaut Les sections de directives suivantes correspondent aux sections par défaut utilisées dans les fichiers de configuration Apache : <VirtualHost>. <Location> et <LocationMatch>.

gif. Toutefois. dans le fichier httpd. comme ceci : # httpd –DSSL . de sorte que les directives s'appliquent si l'argument n'est pas transféré. le paramètre de ligne de commande doit être -DSSL. Le fichier de configuration Apache par défaut comprend des exemples de ce type pour différents modules MPM.conf.so </IfDefine> que vous activeriez à la ligne de commande. Par exemple. Sections de directives pour l'évaluation conditionnelle Apache assure la prise en charge de sections conditionnelles. Dans l'exemple suivant.(gif|jpg)"> concordera avec toutes les requêtes demandant un fichier image dont l'extension est . Vous pouvez également nier l'argument à l'aide du signe "!". Les directives qui y figurent seront traitées uniquement si certaines conditions sont remplies : <IfDefine>. vous verriez : <IfDefine SSL> LoadModule ssl_module modules/mod_ssl.jpg ou .wikipedia.org/wiki/ Expression_r%C3%A9guli%C3%A8re. Les directives d'une section IfModule ne seront traitées que si le module transféré comme argument est présent dans le serveur Web. Vous en saurez plus sur les expressions régulières en vous rendant à l'adresse http://fr. l'expression régulière <Files ~ "\. par exemple. il vaut mieux les remplacer par les directives DirectoryMatch.Sections de directives Apache Sections de directives Apache 23 Ainsi. <IfModule>. LocationMatch et FilesMatch pour des raisons de clarté. comme dans <IfDefine !SSL>. Les directives de cette section seront traitées si un argument de ligne de commande spécifique est transféré à l'exécutable Apache.

.

par exemple au cours des procédures d'autorisation de fichiers ou lorsqu'il est impossible d'effectuer une liaison avec un port donné. Nous explorerons d'ailleurs plusieurs outils et ressources disponibles pour isoler la cause de la plupart des problèmes. Il couvre à la fois des sujets de base et des sujets avancés. C A l'aide ! Mon serveur Apache ne fonctionne pas ! Quoi de plus frustrant que de ne pas pouvoir avancer sur un ouvrage technique à cause d'un logiciel déficient ? Il n'est pas question que ce soit le cas pour ce livre.2 Dépannage e chapitre traite des problèmes les plus communs rencontrés lors de l'exécution d'Apache. N'hésitez donc pas à sauter ce qui ne vous concerne pas si vous venez tout juste de découvrir Apache ! . Nous expliquerons comment les résoudre. bien sûr. C'est pourquoi nous avons placé ce chapitre vers le début de l'ouvrage.

Sachez que le fichier d'erreurs ne sera créé qu'une fois qu'Apache aura été démarré pour la première fois.log et se situe également sous le répertoire logs. avertissements ou erreurs liés à son fonctionnement. afin de consigner les erreurs sur l'entrée standard d'un autre programme. Préfixez-le avec un tiret. C'est le premier endroit où chercher pour résoudre un problème lié au serveur. ce fichier peut se trouver ailleurs. Sous Windows. ainsi que les requêtes interdites ou non valides.26 CHAPITRE 2 Dépannage Le journal d'erreurs ErrorLog logs/error_log Le journal d'erreurs assure le suivi des événements importants survenant dans la vie du serveur. . redémarrages. le plus souvent sous /var/log/httpd. Vous utiliserez la directive ErrorLog pour préciser le chemin du fichier journal d'erreurs. comme les démarrages. Cette technique est décrite plus en détail au Chapitre 3. le fichier est intitulé error. le fichier error_log est placé par défaut dans le répertoire logs/ de votre installation Apache. Sur les systèmes UNIX. Si vous utilisez une installation Apache livrée avec votre distribution.

en option. Les facilités local0 à local10 sont réservées aux administrateurs et aux applications comme Apache. si vous tentez de dépanner une configuration spécifique. Le niveau d'erreur par défaut. de sorte qu'Apache utilise le démon du journal système. comme indiqué. y joindre une facilité (par défaut local7). afin de consigner les erreurs Apache (comme le montre l'exemple).1. Une facilité syslog est un champ d'informations associé à un message syslog qui indique la source du message de journal. Contrôle de la quantité des informations consignées LogLevel notice Les informations d'erreur fournies par Apache peuvent être classées en fonction de leur degré d'importance. avec l'un des arguments présentés au Tableau 2. permet de choisir les messages à recevoir. Seules les erreurs de ce niveau d'importance (ou supérieur) seront consignées. En revanche. passez l'argument syslog à ErrorLog. . convient pour la plupart des installations Apache. Vous pouvez. La directive LogLevel. vous pouvez abaisser le niveau jusqu'à "debug" (déboguer) pour obtenir des informations de consignation plus détaillées. "warn" (avertir).Connexion au démon du journal système 27 Connexion au démon du journal système ErrorLog syslog ErrorLog syslog:local7 Sous UNIX.

sending another SIGHUP. or Min/MaxSpareServers). Child process 1234 did not exit. Opening config file. (You may need to increase StarServers. exiting child. alert crit Conditions critiques.. socket: Failed to get a socket. Server seems busy. inutilisable. le système est Exiting.1 Options LogLevel telles que décrites dans la documentation Apache Paramètre Description Exemple emerg Situation d'urgence. Premature end of script headers..28 CHAPITRE 2 Dépannage Tableau 2. . Une action doit être entreprise immédiatement. error warn notice info debug Messages de débogage. Informatif. getpwuid: couldn't determine user name from uid. Child cannot open lock file. mais méritant d'être signalée.. Situation normale.. Situation d'erreur. Situation d'avertissement.

Escape character is '^]'.0-dev Last-Modified: Sat.apache.9.226. Vous êtes certain. HEAD / HTTP/1. à la recherche de problèmes communs..org (192.0.1 200 OK Date: Sun.106.106.0 HTTP/1. .0.org 80 Trying 192.226). à l'aide d'apachectl.54 OpenSSL/0. qu'un serveur en état de marche pourra redémarrer grâce à ce nouveau fichier de configuration..apache. avant de l'utiliser sur un serveur en situation réelle.Test de la configuration Apache à la recherche de problèmes 29 Test de la configuration Apache à la recherche de problèmes # apachectl configtest Cette commande sert à tester le fichier de configuration Apache.7a DAV/2 SVN/1.2. Apache procède de la même manière pour tester votre configuration chaque fois que vous émettez une commande de redémarrage.87.54 (Unix) mod_ssl/2. Test d'Apache à partir de la ligne de commande $ telnet www. 03 Sep 2005 11:35:42 GMT ETag: "203a8-2de2-3ffdc7a6d3f80" Accept-Ranges: bytes Content-Length: 11746 Cache-Control: max-age=86400 Expires: Mon. 05 Sep 2005 20:42:02 GMT Connection: close Content-Type: text/html. 04 Sep 2005 20:42:02 GMT Server: Apache/2. charset=ISO-8859-1 Connection closed by foreign host. de cette manière. Connected to ajax-1.87.

via Telnet. comme le cas peut se présenter lorsque vous accédez à un serveur à distance sur SSH. vous pouvez utiliser un client Telnet (programme permettant de connecter directement un serveur à un port donné) pour rechercher la présence d'un serveur Apache actif à partir de la ligne de commande. si vous pouvez accéder à Apache sur une machine distante à partir de l'adresse localhost en utilisant Telnet. Ainsi. à l'adresse www. Connectez-vous. Si vous ne recevez pas de réponse à une requête Telnet distante alors que votre réseau est correctement configuré.0 Appuyez deux fois sur la touche Entrée.apache.apache. vous pouvez obtenir un résultat analogue en émettant la commande : lynx –head –dump http://www. cela signifie qu'Apache n'écoute pas sur l'adresse et le port en question. Si un navigateur de ligne de commande Lynx est installé sur votre système UNIX.org Le Chapitre 7 traite de mod_ssl et donne une autre méthode pour se connecter à un serveur Web activé par SSL à l'aide de l'outil de ligne de commande openssl.org (ou à votre site préféré) sur le port 80.0 ou GET / HTTP/1.30 CHAPITRE 2 Dépannage HTTP étant un protocole fondé sur du texte simple. . Cela peut être utile pour dépanner un environnement dans lequel il n'existe pas de navigateur Web. puis tapez : HEAD / HTTP/1. mais que vous n'utilisez pas de navigateur à distance. Vous devriez recevoir une réponse semblable à celle de l'exemple. le problème peut provenir d'un pare-feu ou d'un paramètre incorrect de la directive Listen d'Apache.

Vérification du fonctionnement d'Apache 31 Vérification du fonctionnement d'Apache ps –aux | grep httpd 25297 ? S 0:00 /usr/local/www/bin/ httpd -k start 15874 ? S 0:06 /usr/local/www/bin /httpd -k start 14441 ? S 0:02 /usr/local/www/bin /httpd -k start .com:http (LISTEN) .com:http (LISTEN) httpd 25297 root 3u IPv4 136524 TCP www.exemple. Les systèmes UNIX proposent plusieurs outils de ligne de commande pour vous aider .exemple.0.com:http (LISTEN) httpd 30277 nobody 3u IPv4 136524 TCP www.exemple. /usr/sbin/lsof | grep httpd |grep IPv httpd 14441 nobody 3u IPv4 136524 TCP www. l'exemple en montre quelques-uns.. .151:80 0. netstat -ltnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192. Vous ne serez donc pas en mesure de savoir s'il fonctionne ou si un problème est survenu sur le réseau. Les outils netstat et lsof désignent le port et l'adresse sur lesquels le serveur Apache écoute.0.168. L'outil ps indique si le processus httpd fonctionne ou non sur le système.0:22 0.0: * LISTEN 1038/sshd Il pourra arriver que vous ne puissiez pas vous connecter au serveur..0.0..0.0.0: * LISTEN 25297/httpd tcp 0 0 0.1..

vous pouvez envoyer un signal à tous les processus nommés httpd.32 CHAPITRE 2 Dépannage Sous Windows. comme indiqué. en spécifiant le signal à envoyer comme premier argument. Sous Linux. HUP servira de signal pour arrêter le serveur et SIGHUP pour le redémarrer. à l'aide de ps ou de lsof.exe fonctionne. Vous pouvez également remplacer le signal par son équivalent numérique. avec la commande killall. Autres manières d'arrêter Apache # kill –HUP 25297 # kill –9 25297 Il peut quelquefois être nécessaire ou pratique d'arrêter le serveur directement à l'aide de l'utilitaire de ligne de commande kill au lieu d'utiliser le script apachectl. et l'identifiant du processus du serveur Apache (25 297 dans cet exemple) comme second argument. cette commande les arrêtera toutes. arrêter tous les processus httpd en utilisant ceci : # killall –HUP httpd Soyez attentif toutefois : si vous exécutez plusieurs instances d'Apache. Vous pouvez. Consultez la page du manuel traitant de kill pour en savoir plus. vous devez d'abord trouver l'identifiant du processus du serveur Apache actif. Vous pouvez également utiliser l'application de la barre des tâches figurant dans la plupart des versions récentes pour connaître la situation d'Apache. vous pouvez faire appel au Gestionnaire des tâches (raccourci clavier : Ctrl+Alt+Suppr) pour vérifier que le processus Apache. Pour cela. par exemple. Terminez ensuite le processus à l'aide de l'outil de ligne de commande kill. . comme indiqué dans l'exemple.

par exemple lorsque des problèmes d'en-tête ou de cookies surviennent. qui est distribué avec Apache 2.net/ mod_logio. mod_loopback est un outil de débogage de clients Web. notamment des données POST ou PUT : http://www.Utilisation d'Apache… pour déboguer Apache 33 N'oubliez pas qu'il vous faut disposer des autorisations appropriées pour que ces commandes fonctionnent.com/mod_tee/ http://trace-output.sourceforge. Il renvoie simplement en écho au navigateur tout ce qu'il a reçu concernant une requête HTTP.webthing. envoie toutes les données reçues ou renvoyées par le serveur vers un journal d'erreurs à des fins de débogage. vous devez être superutilisateur ou propriétaire du processus Apache pour être autorisé à y mettre fin et à le redémarrer. .shtml mod_tee et mod_trace_output sont des modules tiers qui stockent le contenu lorsqu'il est desservi.com/Software/mod_loopback/index. Dans presque tous les cas. Sous Windows. Utilisation d'Apache… pour déboguer Apache Plusieurs modules Apache peuvent vous aider à dépanner ou à déboguer une configuration Apache ou une application Web.snert. vous pouvez forcer l'arrêt d'Apache en cliquant sur le bouton Fin de tâche du Gestionnaire des tâches. Ils se trouvent aux URL suivantes : http://apache. Tous ces modules affectent les performances mais peuvent se révéler très utiles pour le débogage.

Dans cette section.34 CHAPITRE 2 Dépannage Erreurs de démarrage De nombreuses causes peuvent empêcher Apache de démarrer. Une erreur de syntaxe ("syntax error") signale soit que vous avez mal orthographié une directive (ici. Erreur de syntaxe Syntax error on line xxx of /etc/httpd/httpd. indiquée dans le message d'erreur. Ainsi. le fichier de configuration pourra être traité. soit que vous avez fait figurer une ou plusieurs directives utilisées par un module qui n'a pas été ajouté au serveur. Vérifiez la syntaxe du fichier de configuration. même si un module n'est pas disponible.conf. vous devez soit stopper le programme qui utilise ce port avant de démarrer Apache soit modifier. le port sur lequel .conf: La commande "PiidFile" n'est pas valide. Elle est peut-être mal orthographiée ou bien définie par un module qui ne figure pas dans la configuration du serveur. PidFile) dans le fichier de configuration. Adresse déjà utilisée "Address already in use: make_sock: could not bind to port" Une erreur d'adresse déjà utilisée ("address already in use") indique qu'un autre programme emploie le port auquel Apache tente de se connecter. Pour résoudre le problème. dans le fichier de configuration httpd. afin d'exclure des directives de manière conditionnelle. nous examinons certains des problèmes qui peuvent survenir et les erreurs que vous recevez pour chacun d'entre eux. Reportez-vous au Chapitre 1 pour en savoir plus sur l'utilisation d'une directive <ifModule>.

sont aussi connus pour utiliser le port 80 à certaines occasions. cela peut signifier qu'une instance d'Internet Information Server ou de Microsoft Personal Web Server s'exécute sur le port sur lequel Apache est configuré.conf. comme Skype. Pour résoudre ce problème.Erreurs de démarrage 35 Apache écoute les requêtes. faites passer. Ensuite. Module non compatible "module xxx is not compatible with this version of Apache" Une erreur de module non compatible ("module is not compatible") survient quand Apache tente de charger un module qui a été compilé pour un serveur plus récent (ou plus ancien) que celui actuellement installé. le port utilisé par Apache sur un nombre supérieur à 1 024. ce type d'erreur survient quand un autre serveur Apache fonctionne déjà sur votre système. connectez-vous en tant que racine et émettez la commande su. Dans la plupart des cas. dans votre fichier httpd. seuls les utilisateurs disposant de droits peuvent se connecter aux ports compris entre 1 et 1 024. D'autres programmes populaires. Impossible de se connecter au port [Mon Jan 9 20:09:50 2005] [crit] (13)Permission denied: make_sock: could not bind to port 80 Ce type d'erreur indique que vous ne disposez pas des autorisations nécessaires pour qu'Apache se connecte au port spécifié dans le fichier de configuration Apache. en ajustant les valeurs données après les directives Listen et Port. Dans le cas de Windows. Si vous ne disposez pas d'un accès racine. Si vous disposez . tentez à nouveau de démarrer le serveur. Sous UNIX.

acceptent des noms d'hôtes comme arguments. Impossible d'ouvrir un journal ou un fichier de configuration (13)Permission denied: httpd: could not open error log file /usr/local/apache/logs/error_log. . une erreur s'affiche. vous pourrez peut-être le recompiler à l'aide de votre installation Apache actuelle (voir Chapitre 1). Résolution de nom "Cannot determine hostname" Plusieurs directives Apache. Pour résoudre ce problème. ainsi que l'orthographe des noms d'hôtes fournis dans httpd. vérifiez votre DNS et les paramètres /etc/hosts. Chaque fois que cela est possible. si Apache n'est pas capable de résoudre un nom d'hôte fourni sur une adresse IP au démarrage à l'aide du DNS (service de nom de domaine) de la liste d'hôtes de votre système. 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.conf. signalant l'impossibilité de déterminer le nom d'hôte. Si vous ne disposez pas du source ou que vous soyez incapable de recompiler un module dont la fonctionnalité est essentielle pour vous. Toutefois.36 CHAPITRE 2 Dépannage du source du module. mettez à niveau (ou rétrogradez) votre serveur Apache avec une version compatible avec le module. notamment ServerName et Listen. utilisez les adresses IP au lieu des noms d'hôtes pour des directives comme Listen et <VirtualHost>.

démarrez Apache sous l'identité du superutilisateur (ou de l'utilisateur) qui l'a installé ou. cela signifie que l'URL demandée est soumise à des restrictions d'accès auxquelles vous ne satisfaites pas. employez chmod pour modifier la propriété du fichier nommé dans le message d'erreur. vous pouvez employer l'utilitaire chmod pour définir ces autorisations. . Erreurs de refus d'accès "Forbidden/You don't have permission to access /xxx on this server" Si votre navigateur Web renvoie un message du type "403 Forbidden/Access Denied" lorsque vous tentez de charger une page Web via votre serveur Apache. Ensuite. Dans ce cas. Le message "Client denied by server configuration" (Client refusé par la configuration du serveur) peut apparaître dans le journal des erreurs. figurant dans les fichiers de configuration Apache. Cela signifie que le refus provient des directives de contrôle d'accès – comme Allow (Autoriser) et Deny (Refuser) – dans les sections <Directory> ou <Location> de cette URL. Sous UNIX.Erreurs de refus d'accès 37 Ce problème survient souvent quand Apache est lancé par un utilisateur autre que celui qui l'a construit et installé. Pour résoudre ce problème. si vous disposez des autorisations. vérifiez que tous les répertoires menant au document en question sont accessibles à la fois en lecture et en exécution pour le propriétaire du processus Apache. modifiez les autorisations du contenu Web ou des fichiers que vous avez demandés. Une déclaration "Directory index forbidden by rule" (Index de répertoire interdit par la règle) dans le journal des erreurs signale que vous avez tenté de consulter un répertoire dans lequel ne se trouvait aucun fichier d'index.

le chipset. Options ExecCGI is off in this directory Quand vous tentez d'exécuter un script CGI. Erreurs internes au serveur Les erreurs internes au serveur sont celles qui empêchent Apache de répondre à une requête. Cela signifie que le CGI n'est pas signalé comme exécutable dans le fichier de configuration Apache ou que les scripts CGI ne peuvent pas être exécutés à partir du répertoire en question. La situation est due soit à un bogue (généralement présent dans des bibliothèques ou des modules expérimentaux mal écrits). le message "Options ExecCGI is off in this directory" (Options ExecCGI désactivées dans ce répertoire) peut s'afficher. consultez l'option Indexes de la directive Options (voir Chapitre 6). 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'accéder à des zones de mémoire appartenant à d'autres processus système. ou bien le système rencontre une instruction malformée ou interdite dans le processus Apache. . le bus ou le processeur).38 CHAPITRE 2 Dépannage Pour en savoir plus sur l'indexation des répertoires et les fichiers d'index. soit à une panne matérielle (habituellement dans la mémoire. Renseignez-vous sur les directives ScriptAlias ou Options pour en savoir plus.

3] Premature end of script headers: /usr/local/apache/cgi-bin/test-cgi Une erreur "Premature end of script headers" (Fin prématurée d'en-tête de script) est due à l'exécution incomplète d'un script CGI.168.168. ou plusieurs en-têtes. Parfois. En-têtes "mal formés" [error] [client 192.200. par exemple. avant même que le script n'ait renvoyé des données. temps d'unité centrale). Les pannes peuvent également relever d'autres éléments. notamment des erreurs dans le code ou l'absence de certaines bibliothèques auxquelles le programme est lié. Bad header=xxx: /usr/local/apache/cgi-bin/exemple. En effet. suivis d'une ligne vide.3] malformed header from script. comme nous le verrons au Chapitre 9.cgi Une erreur "en-tête mal formé" apparaît dans un script lorsque les en-têtes n'ont pas le format approprié (généralement du fait d'une erreur de programmation). le système d'exploitation ou Apache peuvent terminer le processus s'il consomme trop de ressources (mémoire.Erreurs internes au serveur 39 Fin prématurée des en-têtes de script [error] [client 192. si votre script affiche #!/usr/local/bin/perl sur sa première ligne alors que l'interpréteur Perl est situé à /usr/bin/perl. Cette erreur peut apparaître. Ces erreurs sont généralement dues à un arrêt anormal du programme. il faut que le programme CGI dispose des autorisations d'exécution et que l'interpréteur de la première ligne du script pointe vers le bon programme.200. . Le serveur Apache attend une réponse de script commençant par zéro.

3 SSL. ou est incorrect. notamment le module Apache 1.0. fournissez un ServerName valide. .0. un ServerName réglé sur localhost. cela peut être dû au fait que le nom canonique de votre hôte est inaccessible depuis l'extérieur de votre réseau. ou réglez UseCanonicalName sur "off". Ce problème survient fréquemment sur les machines se trouvant derrière un proxy inverse (voir Chapitre 10). sera inaccessible si le serveur redirige l'utilisateur vers une URL fondée sur ces valeurs. 127. Les redirections ne fonctionnent pas UseCanonicalName off Si votre serveur Apache devient inaccessible dès que le serveur émet une redirection. ou sur une adresse privée. Par exemple.40 CHAPITRE 2 Dépannage Autres fichiers pour la journalisation des erreurs RewriteLog /usr/local/apache/logs/rewrite_log RewriteLogLevel warn SSLLog /usr/local/apache/logs/ssl_log SSLLogLevel warn ScriptLog logs/cgi_log Plusieurs modules. de sorte que les URL autoréférentielles se construisent avec le nom d'hôte fourni par le client. mod_rewrite et mod_cgifournissent leurs propres directives pour consigner des données spécifiques au module dans un fichier séparé.1. Pour résoudre ce problème.

Démarrage du serveur Si vous ne parvenez pas à démarrer le serveur. Si Apache ne parvient pas à ouvrir les fichiers de configuration ou de journal. de sorte à accéder aux ports privilégiés. vérifiez qu'ils appartiennent bien à l'utilisateur qui a installé Apache et que celui-ci possède l'autorisation d'y écrire. Il est aussi possible que le serveur ne s'exécute pas du tout. netstat ou du Gestionnaire de tâches (sous Windows). Pour cela. lancez Apache en tant que superutilisateur (racine).Liste de vérification pour le dépannage 41 Liste de vérification pour le dépannage Cette section résume certains des problèmes les plus fréquents survenant lors du dépannage d'Apache. consultez le journal des erreurs pour obtenir des informations sur les causes de la panne. Vérifiez ensuite que vous pouvez vous connecter à Apache à partir de la machine locale. Vérifiez qu'Apache s'exécute à l'aide de ps. Vérifiez ensuite qu'Apache fonctionne . du réseau ou du navigateur. Si un autre serveur fonctionne déjà à cette adresse. vous devez d'abord déterminer si l'erreur provient du serveur. utilisez Telnet pour vous connecter directement au serveur et émettre une requête test. optez pour une combinaison port/adresse différente. Connexion au serveur Si vous tentez d'accéder à une page du serveur et qu'elle ne s'affiche pas. Si vous ne disposez pas des autorisations nécessaires pour vous connecter au port demandé.

Si vous exécutez Apache sur un port non standard. il y a des chances que vous vous retrouviez bloqué. par exemple. mais pas à distance. Documents introuvables Si vous parvenez à accéder au serveur mais que vous obtenez une erreur de type "Document Not Found" (Document introuvable). De nombreux systèmes d'exploitation empêchent par défaut l'accès depuis l'extérieur. Si vous pouvez accéder au serveur au niveau local.42 CHAPITRE 2 Dépannage sur la combinaison adresse/port correcte. il est probable qu'Apache écoute sur une adresse ou un port locaux qui ne sont pas accessibles à distance. Enfin. Si Apache écoute sur l'adresse correcte mais qu'il soit inaccessible en dehors de votre réseau. Vérifiez que votre pare-feu ou votre routeur sont correctement configurés. utiliser l'outil system-config-securitylevel sur les systèmes Fedora. . consultez le journal d'erreurs à la recherche de problèmes liés au cryptage de données SSL. Vous pouvez. Utilisez netstat ou lsof pour déterminer les adresses sur lesquelles Apache écoute et vous assurer qu'elles sont correctes. excepté sur certains ports sélectionnés. La résolution de ce problème varie selon les distributions. il est possible que le trafic réseau vers votre serveur Apache soit bloqué. si vous utilisez Secure Sockets Layer (SSL) pour accéder au serveur (voir Chapitre 7) et que vous vous connectez à l'aide de versions plus anciennes du navigateur ou que vous exécutez des configurations inhabituelles. et l'outil Windows Firewall dans le Panneau de configuration Windows. vérifiez que le document existe bien dans le système de fichiers. Servez-vous de l'utilitaire traceroute (tracert sous Windows) pour tester la connectivité du réseau entre les hôtes en question.

Vérifiez que la requête répond à toutes les exigences stipulées par les directives de contrôle d'accès du fichier de configuration Apache. Enfin. vérifiez qu'il a reçu des autorisations en lecture et en exécution. en consultant le fichier access_log. Vérifiez que le propriétaire du processus Apache possède des autorisations de lecture et d'énumération pour tous les répertoires figurant sur le chemin menant au fichier. Accès interdit Si un document existe bel et bien mais que son accès vous est refusé ("Access Forbidden"). Assurez-vous que vous n'avez pas mal orthographié ou accidentellement supprimé le répertoire cible. Vérifiez ensuite que vos directives Alias pointent vers le bon endroit. partez à la recherche des redirections incorrectes. Si vous tentez d'accéder à un script CGI. Si plusieurs instances d'Apache s'exécutent simultanément.Liste de vérification pour le dépannage 43 Vérifiez ensuite que la requête a atteint le serveur. Vérifiez notamment que les barres obliques de fin sont bien présentes et testez les problèmes liés à ServerName décrits plus tôt dans ce chapitre. c'est-à-dire l'emplacement où se trouvent vos documents cibles. vérifiez quelques points de base. Vérifiez que vous ne tentez pas d'accéder à un répertoire ne contenant pas de fichier d'index alors que les listings de répertoire sont interdits dans le fichier de configuration Apache. Assurez-vous que le propriétaire du processus Apache dispose de l'autorisation de lire le fichier. prenez garde à ne pas vous connecter au mauvais serveur. .

Si nécessaire. essayez de respecter le "règlement" qui stipule que vous devez d'abord essayer de trouver vous-même une solution. consultez le fichier error_log d'Apache pour tenter d'en trouver la cause. En dernier ressort. Consultez la documentation Apache. Si toutefois une erreur non répertoriée ici survient. Et posez-vous les questions suivantes : Tentez-vous d'accéder à un programme CGI ? Possède-t-il les autorisations de lecture et d'exécution appropriées ? Le chemin vers l'interpréteur à la première ligne du script est-il correct ? L'interpréteur est-il désigné comme étant un script CGI par une directive ScriptAlias ou une directive de même type ? Si tout le reste a échoué Vous avez découvert dans ce chapitre les problèmes les plus communs rencontrés par les utilisateurs d'Apache. augmentez le LogLevel du serveur Apache pour trouver des indices sur la nature du problème.html#http-users Toutefois.org/lists. vous pouvez envoyer votre question à la liste de diffusion des utilisateurs Apache.apache. la première chose à faire est de vérifier les journaux d'erreurs. les listes de diffusion et la base de données des bogues.44 CHAPITRE 2 Dépannage Erreurs internes au serveur Si vous obtenez une "Internal Server Error" (Erreur interne au serveur) dans votre navigateur lorsque vous tentez de charger une page du serveur Web. à l'adresse suivante : http://httpd. puis regrouper suffisamment d'informations pour que les autres puissent vous aider ! .

rotation des journaux. Ce chapitre décrit les problèmes les plus fréquents survenant lors de la consignation des requêtes : consignation conditionnelle. Il traite également de plusieurs modules et utilitaires intégrés et tiers. . Apache propose diverses possibilités pour enregistrer des informations concernant tous les aspects d'une requête. destinés à surveiller la situation de votre serveur Apache et à analyser ses journaux. résolution des adresses IP et consignation de type "pipe".3 Journaux et surveillance Introduction à la consignation des erreurs dans Apache Outre la fonction de consignation des erreurs décrite au Chapitre 2.

Création des formats de journaux LogFormat "%h %l %u %t ###BOT_TEXT###quot;%r###BOT_TEXT###quot; %>s %b" common LogFormat "%h %l %u %t ###BOT_TEXT###quot;%r###BOT_TEXT###quot; %>s %b" ###BOT_TEXT###quot;%{Referer}i###BOT_TEXT###quot; ###BOT_TEXT###quot;%{User-agent}i###BOT_TEXT###quot;" combined La directive LogFormat permet de signaler à Apache les aspects de la requête à enregistrer.log dans Windows). mais cela sera traité à la section suivante. Contient des informations sur les requêtes ayant été desservies par le serveur. Contient des informations liées aux conditions de l'erreur.46 CHAPITRE 3 Journaux et surveillance Fichiers journaux Apache par défaut Apache propose plusieurs fonctions de surveillance et de consignation qui permettent de s'assurer du bon fonctionnement du serveur. il remplace chacun des champs dont le préfixe est un signe % par l'attribut de requête correspondant. et indique si la requête a réussi ou a échoué. Des directives supplémentaires sont requises pour indiquer à Apache l'endroit où ces informations doivent être consignées. La configuration par défaut d'Apache propose deux fichiers journaux. placés dans le répertoire logs du répertoire d'installation : b Le fichier access_log (access. Quand Apache reçoit une requête. comme l'URL demandée ou l'adresse IP du client. .log dans Windows). ainsi que différents événements du cycle de vie du serveur. b Le fichier error_log (error. 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é).

.png HTTP/1.4 dans cet exemple). Consultez le Chapitre 6 pour en savoir plus sur la configuration de l'authentification fondée sur HTTP.200. L'heure à laquelle la requête est parvenue au serveur. Le texte de la ligne de requête initiale du client comprenant la méthode HTTP utilisée. b %t. L'adresse IP du client qui a envoyé la requête au serveur Web. ce qui signifie que la requête s'est terminée avec succès).200.168.168.4 – utilisateur [12/Jun/2005:08:33:34 +0500] "GET /exemple.utilisateur [12/Jun/2005:08:33:34 +0500] "GET /exemple. Le code de statut de la requête HTTP finale que le serveur Web envoie au client (200 dans cet exemple. chaque entrée de votre fichier journal ressemblera à ceci : 192.1. U.7)" Voici la description des champs les plus importants : b %h. la ressource demandée et la version du protocole HTTP employée par le navigateur du client ("GET /exemple. en-US.0 (Windows.png HTTP/1. b %u.168. L'identifiant de l'utilisateur qui a envoyé la requête déterminée par l'authentification HTTP (utilisateur dans cet exemple).0" 200 1234 http://www.Création des formats de journaux 47 Si vous utilisez CLF (Combined Log Format). rv:1.exemple.7. Windows NT 5.png HTTP/1.4 . ou le nom d'hôte du client si vous avez activé HostNameLookups (192.html "Mozilla/5.0" ici).com/index. b %r. chaque entrée de votre fichier journal ressemblera à ceci : 192. b %>s.200.0" 200 1234 Si vous employez le format commun combiné.

7)" dans cet exemple). Vous pouvez remplacer le nom par la définition du format elle-même.exemple.log Vous pouvez créer de nouveaux fichiers journaux. U. en complément de ceux proposés dans Apache. en octets.48 CHAPITRE 3 Journaux et surveillance b %b. Le format de journal combiné contient deux champs de plus que le format de journal commun : b %{Referer}i. . en excluant les en-têtes de réponse (1234 dans cet exemple).0 (Windows. en-US. Il contient des informations sur le navigateur du client ("Mozilla/5. rv:1. Une directive supplémentaire plus simple.html dans cet exemple). b %{User-agent}i.com/index. TransferLog.7.1. Cet exemple utilise CustomLog pour créer un nouveau fichier journal et stocker les informations d'un fichier journal précédemment défini appelé common (vu à la section précédente). Création d'un fichier journal personnalisé CustomLog logs/access_log common TransferLog logs/sample. c'est-à-dire la page Web qui a fait référence au document actuel (http://www. L'en-tête de la requête HTTP Referer. extraira simplement la définition fournie par la dernière directive LogFormat. Windows NT 5. L'en-tête de la requête HTTP User-agent. La taille. de l'objet envoyé au client en réponse à la requête.

prenez soin de n'employer que des barres obliques (même si les barres obliques inversées sont autorisées). Consignation conditionnelle de requêtes SetEnvIf Request_URI "(\. lorsque vous entrez un chemin de fichier sur des plates. suivi du chemin vers le programme qui recevra les informations de journal sur son entrée standard. il s'exécute sous le nom de l'utilisateur qui a démarré httpd. il est conseillé de toujours utiliser des barres obliques dans les fichiers de configuration.200\. Lorsque vous employez un programme externe. Il s'agit de la racine si le serveur a été démarré par la racine .168\. Pour cela.jpg)$" image CustomLog logs/access_log common env=!image SetEnvIf Remote_Addr 192\. De même. Cette variable peut avoir été précédemment définie en fonction de . commencez par le caractère pipe ("|"). D'une façon générale.formes différentes d'UNIX. Cet exemple met en œuvre le programme rotatelogs. assurez-vous que le programme est sécurisé. livré avec Apache (qui sera décrit dans une section ultérieure).Redirection des journaux vers un programme externe 49 Redirection des journaux vers un programme externe TransferLog "|bin/rotatelogs /var/logs/apachelog 86400" Vous pouvez également utiliser CustomLog ou TransferLog pour rediriger ("pipe") le résultat du journal vers un programme externe plutôt que vers un fichier.5 specialmachine CustomLog logs/special_access_log common env=specialmachine Vous pouvez décider de consigner une requête selon qu'il existe ou non une variable d'environnement.gif|\.

Surveillance des personnes se connectant à votre site SetEnvIfNoCase Referer www\. vous pouvez consigner l'en-tête Referer: de la requête.com internalreferral LogFormat "%{Referer}i -> %U" referer CustomLog logs/referer. Dans ce cas particulier.50 CHAPITRE 3 Journaux et surveillance plusieurs paramètres. Même s'il n'est pas toujours présent ni précis. Cet en-tête contient l'URL pointant vers la page demandée. la directive CustomLog peut accepter une variable d'environnement comme troisième argument. il fonctionne dans la majorité des cas. et non celles provenant d'une page Web interne. Nous le voyons dans l'exemple. l'entrée ne sera consignée que dans le cas où la variable est absente.exemple\. et comment consigner des requêtes d'une adresse IP particulière dans un fichier journal séparé. L'entrée ne sera consignée que si la variable existe. Pour cela. nous souhaitons simplement consigner les références externes. L'exemple montre comment éviter de consigner des images aux formats GIF et JPEG. Cet exemple montre comment utiliser une variable d'environnement pour consigner les informations de la référence (referrer) dans un fichier séparé. nous vérifions ici que la référence correspond à notre propre domaine. Consultez la section suivante pour en découvrir un autre exemple. .log referer env=!internalreferral Pour surveiller les personnes qui se connectent à votre site Web. notamment l'adresse IP du client ou la présence d'un en-tête donné dans la requête. Si la variable d'environnement est niée par un préfixe "!".

par exemple la situation de chaque worker. le nombre total d'accès.168. etc. .com/ server-status. Une page HTML s'affiche.Allow Deny from all Allow from 192. en vous rendant sur la page http://www.).exemple. le nombre de workers inactifs.0 </Location> Le module mod_status fournit à l'administrateur des informations sur l'activité et les performances du serveur. l'heure à laquelle le serveur a été démarré ou redémarré. N'oubliez pas que cet enregistrement de statistiques supplémentaires peut considérablement ralentir le serveur. Vous pouvez alors accéder aux statistiques du serveur à l'aide d'un navigateur Web. tout en limitant l'accès aux informations à certaines adresses IP uniquement. Cet exemple montre comment activer la surveillance mod_status. les requêtes actuelles traitées. etc.Surveillance d'Apache avec mod_status 51 Surveillance d'Apache avec mod_status <Location /server-status> SetHandler server-status Order Deny. La directive ExtendedStatus On permet d'obtenir d'autres informations. proposant les statistiques du serveur sous une forme facilement lisible (le nombre de workers répondant à des requêtes.

net/. Il prend en charge les versions 1. Pour Apache 2.sourceforge. OpenNMS (http://www.org) et Nagios (http://www. qui se trouve à l'adresse http://www.net-snmp. Ce protocole sert souvent à gérer les serveurs réseau et l'équipement d'une console centrale.mod-snmp. il existe un module analogue. Il nécessite un correctif sur le cœur ("core") d'Apache. appelé mod_apache_snmp. notamment le temps de fonctionnement du serveur. ainsi que de nombreux autres paramètres. Vous le trouverez à l'adresse http:// www. le nombre d'octets et de requêtes desservis.com/.3. Les modules SNMP peuvent aussi générer des alarmes lorsque l'on atteint un certain seuil ou une condition d'erreur. 2 et 3 du protocole SNMP et peut être compilé sous forme de DSO. Plusieurs outils et structures Open Source permettent de gérer les ressources SNMP.org). la charge moyenne.nagios. .52 CHAPITRE 3 Journaux et surveillance Surveillance d'Apache avec SNMP Il existe deux modules Open Source qui ajoutent des fonctionnalités SNMP (Simple Network Management Protocol) au serveur Web Apache. Ce module prend en charge SNMP versions 1 et 2. Le module permet de surveiller facilement les performances d'Apache en temps réel. comme HP OpenView et Tivoli. vous pouvez utiliser mod_snmp. Voyez notamment ceux qui se trouvent aux adresses http://www. le nombre d'erreurs sur une période donnée.opennms. sans qu'il soit besoin de placer un correctif sur Apache. Pour Apache 1. par exemple en cas d'augmentation soudaine du nombre simultané de connexions client.mod-apache-snmp.org.

Analyse des journaux à l'aide d'outils Open Source 53 Analyse des journaux à l'aide d'outils Open Source Il existe plusieurs outils commerciaux et Open Source permettant de traiter et d'afficher les données du journal. Cependant. dénommé apachetop.bzzt. au lieu d'afficher la situation du système d'exploitation.mrunix. pour analyser les journaux : b Webalizer (http://www. Surveillance de vos journaux en temps réel En plus de mod_status et des divers modules SNMP décrits précédemment. un outil de ligne de commande.sf.net/webalizer/) . peut être téléchargé à l'adresse http://clueful. Voici quelques applications très connues.hping. Il fonctionne à la manière de l'outil de ligne de commande top d'UNIX.shagged. Ils procèdent souvent de cette manière : ils extraient un fichier journal.org/visitors/) .net). . disponibles gratuitement et en Open Source. analysent son contenu. par exemple en affichant visuellement le chemin emprunté par vos visiteurs : b Visitors (http://www. D'autres outils permettent de traiter les journaux plus en détail.org/apachetop. b AWStats (http://awstats. puis créent une série de pages Web présentant les statistiques pertinentes.net/). b Pathalizer (http://pathalizer. il montre celle du serveur Web en temps réel.

Vous le trouverez à l'adresse http://www.garand.net/security.com/software).cc/ projects/apache/mod_log_sql/. mais il existe quelques scripts et modules tiers : b mod_log_sql vous permet de consigner des requêtes directement dans une base de données MySQL.php) . etc. b Vous pouvez ensuite interroger la base de données à l'aide de l'outil LogView SQL d'Apache (http:// freshmeat.com/pglogd/. l'utilitaire de ligne de commande tail suffit pour surveiller les entrées de vos journaux d'accès et d'erreurs. puis de les signaler : b Logscan (http://www.outoforder.net/projects/apachelogviewsql/). à la recherche d'erreurs spécifiques. de requêtes mal formées. b ScanErrLog (http://www.digitalstratum. Vous le trouverez à l'adresse http://www. mais de manière rudimentaire et en temps réel : tail -f fichierjournal D'autres programmes permettent d'identifier rapidement les problèmes en analysant les journaux d'erreur. b pglogd collecte les journaux et conserve les entrées dans une base de données PostgreSQL. .librelogiciel.54 CHAPITRE 3 Journaux et surveillance Si vous exécutez Apache sur un système UNIX et que vous disposiez d'un site Web connaissant peu de trafic. Consignation des requêtes dans une base de données Apache ne dispose pas d'outils permettant de consigner des informations vers des bases de données..

Attention Si le chemin pointant vers le programme de rotation des journaux comprend des espaces. de la compression et de l'archivage des journaux.org/. Cependant. en fonction de la taille et du nom des fichiers archivés en se basant sur un modèle. d'archiver et de compresser les anciens journaux à intervalles définis.Rotation et archivage des journaux 55 Rotation et archivage des journaux CustomLog "|bin/rotatelogs /var/logs/apachelog 86400" common Si votre site Web fait l'objet d'un trafic important. Consultez la documentation Apache pour en savoir plus sur l'utilisation de rotatelogs et la façon de procéder à la rotation des journaux. vous pouvez utiliser un programme intermédiaire qui consignera les requêtes. Pour éviter d'arrêter ou redémarrer le serveur lorsque vous manipulez les fichiers journaux. Pour cela. . Apache propose l'outil rotatelogs. Il se chargera ensuite de la rotation. Vous trouverez un programme analogue à l'adresse http://cronolog. Cela est particulièrement courant sous Windows. vous devrez peut-être les annuler en les faisant préfixer par une barre oblique inversée (\). Vous pouvez bien sûr les archiver manuellement. Cet exemple fait appel à l'outil rotatelogs pour créer un nouveau fichier journal et déplacer quotidiennement le journal actuel vers le répertoire /var/logs (il y a 86 400 secondes dans une journée). vos fichiers journaux vont grossir. vous disposez de plusieurs mécanismes permettant de procéder à une rotation périodique.

c'est-à-dire comment remplacer des adresses IP dans des journaux par des noms d'hôtes.168. Apache tente de déterminer (résoudre) le nom d'hôte correspondant à l'adresse IP du client lorsqu'il consigne la requête.0" 200 1234 Si la directive est réglée sur on.png HTTP/1.200. Pour éviter d'utiliser ce paramètre.png HTTP/1. Traitement d'adresses IP consignées $ logresolve < access_log > resolved_log Régler HostNameLookups sur on peut avoir un effet sur les performances du serveur.utilisateur [12/Jun/2005:08:33:34 +0500] "GET /exemple. capable d'analyser les fichiers journaux et de remplacer les adresses IP par des . une entrée access_log peut ressembler à ceci : 192.0" 200 1234 La section suivante explique le processus inverse.56 CHAPITRE 3 Journaux et surveillance Contrôle de la résolution des adresses IP HostNameLookups on Si la directive HostNameLookups est réglée sur on.com . Avec HostNameLookups réglé sur off.exemple.4 – utilisateur [12/Jun/2005:08:33:34 +0500] "GET /exemple. vous pouvez désactiver la résolution des noms et adopter un utilitaire de post-traitement indépendant. cette même entrée ressemblera à ceci : unit12. notamment en allongeant les délais de réponse.

s'il existe un proxy ou une passerelle entre le client et le serveur Web. then apachectl restart. vous pouvez utiliser la redirection. Pour lire de et vers un fichier. car ils placent les résultats en cache et n'entraînent pas de délais lors de la réponse aux requêtes des clients. plutôt que le nom d'un hôte réel. N'oubliez pas que le résultat d'une résolution d'adresse IP ne correspondra pas toujours au nom de l'hôte qui a véritablement envoyé la requête.Redémarrage automatique d'Apache en cas de panne 57 noms d'hôtes. . comme indiqué dans l'exemple. qui lit les entrées du journal à partir de l'entrée standard et produit le résultat inverse sur la sortie standard. fi Si vous installez Apache sous Windows sous forme de service. l'adresse IP signalée par HostNameLookups ou logresolve correspondra à l'adresse IP du proxy ou de la passerelle. Vous obtiendrez alors le nom d'hôte du serveur proxy ou du bloc IP géré par la passerelle. à l'aide du gestionnaire de services. Apache propose un outil de ce type. Redémarrage automatique d'Apache en cas de panne #!/bin/bash if [ `ps -waux | grep -v grep | grep -c httpd` -lt 1 ]. Sous UNIX. vous pouvez installer cette fonctionnalité au moyen d'un script de surveillance ("watchdog". ou chien de garde) qui contrôle le statut d'un autre programme. sachez que vous pouvez le redémarrer automatiquement. en cas de panne. Ces outils sont plus efficaces. sous UNIX et Windows. par exemple.exe dans Windows). Ainsi. intitulé logresolve (logresolve.

58

CHAPITRE 3 Journaux et surveillance

Si, pour quelque raison que ce soit, le programme s'arrête le script de surveillance le redémarre. L'exemple montre un simple script Linux qui surveille la liste des processus système, afin de s'assurer qu'il existe un processus httpd ; en cas d'arrêt, un redémarrage est effectué. Pour l'utiliser, vous devez lui attribuer des autorisations d'exécution, puis l'ajouter à votre configuration cron de sorte qu'il soit exécuté à intervalles prédéfinis. Sous Solaris, utilisez ps -ef au lieu de ps -waux. Vous trouverez à l'URL http://perl.apache.org/docs/ general/control/control.html un script de surveillance plus sophistiqué, capable d'envoyer un e-mail lorsque le serveur est tombé et de surveiller les identifiants de processus httpd spécifiques. La plupart des distributions de Linux comprennent également leur propre script de surveillance générique, pouvant être adapté à Apache.

Fusion et séparation de fichiers journaux
Lorsqu'une grappe de serveurs Web dessert un même contenu, il est souvent nécessaire de fusionner tous les journaux de tous les serveurs en un seul fichier journal avant de le transférer aux outils d'analyse. De même, si un seul serveur Apache gère plusieurs hôtes virtuels, il faut parfois diviser un fichier journal en plusieurs fichiers différents, un pour chaque hôte virtuel. Cela peut être réalisé au niveau du serveur Web (nous le verrons à la section suivante) ou par un post-traitement du fichier journal. Apache 1.3 et 2.x sont livrés avec un fichier de script de prise en charge, nommé split-logfile. Celui-ci se trouve dans le répertoire support/ de la distribution de la source Apache.

Conservation de fichiers séparés pour chaque hôte virtuel

59

Le projet logtool propose une suite d'outils de manipulation des journaux, qui se trouve à l'adresse http://www .coker.com.au/logtools/. L'outil vlogger permet de séparer un flux de journal en plusieurs fichiers journaux spécifiques à un hôte virtuel, ainsi que de remplacer des outils comme cronolog (nous l'avons fait à la section précédente). Il se trouve à l'adresse http://n0rp.chemlab.org/vlogger/.

Conservation de fichiers séparés pour chaque hôte virtuel
<VirtualHost 192.168.200.3> ServerName vhost1.exemple.com CustomLog logs/vhost1.exemple.com_log combined ErrorLog logs/vhost2.exemple.com_log ....... </Virtual Host>

Vous pouvez conserver des journaux d'accès séparés pour chaque hôte virtuel, à l'aide d'une directive CustomLog insérée dans une section <VirtualHost> (nous le voyons dans l'exemple). Vous pouvez aussi choisir de consigner les opérations de tous les hôtes virtuels dans le fichier access_log défini dans le contexte du serveur global :
LogFormat "%v %h %l %u %t ###BOT_TEXT###quot;%r###BOT_TEXT###quot; %>s %b" common_virtualhost CustomLog logs/access_log common_virtualhost
%v consignera le nom de l'hôte virtuel qui dessert la

requête. Vous pouvez ensuite utiliser les outils décrits à la section précédente pour traiter le fichier journal de résultat, notamment si vous disposez d'un grand nombre d'hôtes virtuels.

60

CHAPITRE 3 Journaux et surveillance

Si vous ne voulez pas assurer le suivi des opérations d'un hôte particulier, vous pouvez simplement employer : CustomLog /dev/null

Entrées de journaux communes
En plus des informations indiquées au Chapitre 2, cette section décrit plusieurs entrées de journal relatives à certaines erreurs communes pouvant apparaître lorsque vous consultez vos fichiers journaux. La plupart peuvent être ignorées sans problème.

Fichier favicon.ico introuvable (File favicon.ico Not Found)
La plupart des navigateurs Web récents acceptent l'affichage d'une icône personnalisée près de la barre d'emplacement du navigateur ou lors du stockage d'un signet. Pour cela, le navigateur exige un fichier spécifique du site Web (favicon.ico). Si ce fichier n'existe pas, il renvoie une erreur. Vous en saurez plus sur cette icône en vous reportant au Chapitre 1.

Fichier robots.txt introuvable (File robots.txt Not Found)
Le fichier robots.txt est nécessaire à certains programmes, comme les outils de téléchargement automatique et les robots Web, lorsqu'ils accèdent à votre site Web. Ces programmes analysent les sites Web, en suivant et en téléchargeant tous les liens qu'ils trouvent de manière récursive. Ils sont souvent associés à des moteurs de recherche. Leur principal objectif est de stocker et d'indexer le contenu récupéré. Si le fichier robots.txt est absent, une erreur de ce type est renvoyée.

Entrées de journaux communes

61

httpd.pid écrasé (httpd.pid Overwritten)
Sous UNIX, le fichier httpd.pid contient le PID (identifiant de processus) du processus Apache en cours d'exécution. Il est créé au démarrage d'Apache et supprimé à sa fermeture. Si Apache n'est pas correctement fermé (par exemple si le serveur a dû être arrêté manuellement), ou en cas d'erreur, le fichier n'est pas supprimé. Il subsistera donc au prochain démarrage du serveur et cette erreur sera renvoyée.

Requêtes "longues et étranges"
Il est possible que vous rencontriez des requêtes étranges, comme celle-ci, dans votre journal d'erreurs :
"SEARCH /\x90\x02\xb1\x02\xb1\x02\xb1\x02 ..." "GET /scripts/..%252f../winnt/system32/cmd.exe?/ c+dir HTTP/1.0..." "GET /default.ida?NNNNNNN NNNNNNNNNNNNNNNNNN ..."

Ou encore des requêtes de fichiers exécutables qui n'existent pas sur votre site, comme cmd.exe, root.exe, dir, etc. Certaines entrées de journal naissent de tentatives automatisées pour exploiter les vulnérabilités des serveurs Web. Par chance, la plupart étant générées par des vers ou d'autres applications malveillantes spécifiques à Microsoft Internet Information Server sous Windows, Apache n'en est pas affecté. Toutefois, de temps en temps, des défauts sont découverts dans Apache ; cela peut le rendre vulnérable à des attaques distantes. Il est donc recommandé d'actualiser votre serveur Apache (voir Chapitre 6).

.

prendre en charge plusieurs langues. etc. traiter les sites Web sensibles à la casse. Ces informations sont utiles pour résoudre des problèmes habituels. par exemple : continuer à travailler avec des URL lorsque la structure du site change. . Nous expliquerons également comment utiliser le CGI et les fonctionnalités SSI présentes dans Apache de manière à fournir un contenu généré de manière dynamique.4 Mappage d'URL et contenu dynamique Mappage d'URL Ce chapitre explique comment configurer Apache pour mapper (mettre en correspondance) des requêtes avec des fichiers et des répertoires. ou les rediriger vers des pages ou des serveurs spécifiques.

Si vous les incluez.gif (au lieu de la racine des documents par défaut dans /usr/local/apache2/htdocs/icons/image.64 CHAPITRE 4 Mappage d'URL et contenu dynamique Mappage d'URL et de fichiers avec Alias Alias /icons/ /usr/local/apache2/icons/ Il n'est pas nécessaire que la structure d'un site Web corresponde à la disposition des fichiers sur disque. une requête pour http://www . Par exemple. les barres obliques de fin de la directive Alias sont importantes. Les correspondances peuvent être . Grâce à cette directive. Mappage de motifs d'URL à des fichiers avec AliasMatch AliasMatch ^/(docs|help) /usr/local/apache/htdocs/manual La directive AliasMatch présente un comportement analogue à Alias. la requête client doit également les faire figurer.com/icons.gif amène Apache à rechercher le fichier du répertoire /usr/local/apache2/icons/ image. Attention. faute de quoi la directive n'aura aucun effet.exemple. mais elle permet de préciser une expression régulière pour l'URL.com/icons/image.gif). le serveur renverra une erreur "404 Document Not Found". la directive Alias permet d'effectuer la correspondance entre des répertoires sur disque et des URL spécifiques. si vous utilisez la directive suivante : Alias /icons/ /usr/local/apache2/icons/ et que vous demandez http://www. En effet.exemple.

.exemple. Vous ne pouvez pas toujours contrôler la manière dont les autres sites se lient au vôtre.org/wiki/ Expression_r%C3%A9guli%C3%A8re. Vous en saurez plus sur les expressions régulières à l'adresse http://fr.exemple.com Redirect /latest /3. qu'elle se trouve sur le serveur actuel ou un autre. vous pouvez configurer Apache avec la directive Redirect qui redirige ces requêtes vers la ressource correcte. et ce en fonction de certaines règles de syntaxe.wikipedia. par exemple en ce qui concerne les moteurs de recherche présentant des liens cassés. Par exemple. L'URL de destination peut se trouver sur le même serveur Web ou pointer vers un serveur différent. Dans cet exemple.html sera redirigée vers http://news.com/news/today/index. Même si la directive Redirect peut prendre des arguments optionnels indiquant le type de redirection (temporaire ou permanente).exemple. une requête pour http://www. Les expressions régulières sont des chaînes permettant de décrire un jeu de chaînes ou qui concordent avec lui.html. la syntaxe la plus commune consiste à fournir une URL d'origine et une URL de destination.Redirection d'une page vers un autre emplacement 65 remplacées dans le chemin de destination.0 La structure d'un site Web ordinaire change avec le temps.com/today/index. Redirection d'une page vers un autre emplacement Redirect /news http://news. cette directive désignera n'importe quelle URL sous /help ou /docs pointant vers les chemins du système de fichiers du répertoire manual. Pour éviter les erreurs lorsque des personnes accèdent à votre site Web à l'aide de liens anciens.

Grâce à RedirectMatch.tgz et les requêtes pour http://www.*) /myapp-3. Prenons l'exemple d'un éditeur de logiciels qui distribue des téléchargements sur son site Web et publie les nouvelles versions d'un produit au fil du temps.0-$4 La directive RedirectMatch est identique à Redirect.com/myapp-3. Supposons que le nom de la dernière version du fichier téléchargeable soit myapp-3.0.pdf.0-demo. Il peut arriver qu'un certain pourcentage d'utilisateurs continuent à télécharger d'anciennes versions du logiciel sur des sites Web tiers n'ayant pas encore mis à jour leurs liens.0-manual. Cela apporte beaucoup plus de flexibilité. Les trois premiers éléments de l'expression régulière correspondront au numéro principal et au numéro secondaire. Cet exemple redirige les requêtes pour http://www.exemple.0.66 CHAPITRE 4 Mappage d'URL et contenu dynamique Redirection vers la dernière version d'un fichier RedirectMatch myapp-(1|2)\.5.[0-9])?-(. ces utilisateurs peuvent être facilement redirigés vers la version la plus récente.exemple. .tgz vers http://www.2-manual .com/myapp-1.exemple. Ceux-ci seront remplacés par 3. Le reste du nom du fichier est extrait du dernier groupe de l'expression régulière et remplacé dans l'URL de destination.com/myapp-3. puis à un numéro de correctif optionnel. mais elle permet d'utiliser une expression régulière comme chemin de l'URL d'origine.1-demo.exemple.com/myapp-2.pdf vers http://www.([0-9])(\.

Il peut donc être souhaitable de modifier la page d'erreur par défaut d'Apache et de diriger vos utilisateurs vers un emplacement particulier sur votre site Web. Dans une note. Définition des gestionnaires de contenu AddHandler cgi-script . Il peut s'agir d'une page qui aide vos visiteurs à trouver la ressource demandée. le Chapitre 6 propose des informations complémentaires sur la personnalisation des pages de refus d'accès. d'une page de recherche ou d'une carte du site (comme on le voit dans l'exemple). Ce sont les modules qui proposent des gestionnaires . vous allez recevoir plusieurs requêtes d'URL concernant des documents non valides ou qui n'existent plus.Echec de la redirection ou requêtes non autorisées 67 Echec de la redirection ou requêtes non autorisées ErrorDocument 404 /search. quelles que soient les précautions prises. certaines se termineront tout de même par la terrible réponse "404 Document Not Found". Même si nombre d'entre elles peuvent être traitées en faisant bon usage des Redirect. Apache doit .pl"> Options +ExecCGI SetHandler cgi-script </Location> Les gestionnaires permettent à Apache de déterminer les actions à réaliser sur le contenu demandé.pl .cgi <Location "/cgi-bin/*.html Si vous gérez un site Web populaire ou complexe.

image. Cette fonctionnalité est souvent annexée aux modules de génération de contenu. Apache utilise les types MIME. d'une part pour déterminer ceux des modules ou des filtres qui traiteront un certain contenu. Dans cet exemple. comme PHP et mod_cgi. vidéo) et le second au type spécifique. Ces en-têtes serviront à l'application cliente pour identifier et afficher correctement le contenu à destination de l'utilisateur final. son. La directive SetHandler permet d'associer un gestionnaire à tous les fichiers d'un répertoire ou d'un emplacement particulier. L'exemple montre comment associer le gestionnaire cgi-handler aux fichiers que vous souhaitez exécuter sous forme de CGI. La directive AddHandler associe un gestionnaire à certaines extensions de noms de fichiers. d'autre part pour ajouter des en-têtes HTTP à la réponse. AddHandler indique à Apache de traiter tous les documents présentant des extensions cgi ou pl comme des scripts CGI.68 CHAPITRE 4 Mappage d'URL et contenu dynamique être configuré pour associer un contenu à des gestionnaires spécifiques. RemoveHandler peut servir à supprimer des associations préalables. un moyen d'indiquer le type de contenu d'un document. associe un type MIME ou un gestionnaire particulier à un script CGI. afin d'identifier son type de contenu. entre autres choses. Des exemples de types MIME sont text/html et audio/mpeg. que vous verrez plus loin dans ce chapitre. . La directive Action. Les types MIME MIME est un ensemble de normes qui définissent. Le premier composant du type MIME correspond à la catégorie principale du contenu (texte.

xml et . Le serveur Web fournit toutes les informations nécessaires sur la requête à un programme externe. CGI ayant été le premier mécanisme à générer un contenu unique pour chaque requête à la volée ("contenu dynamique").schema et au contenu de l'URL /xml -schemas/. grâce au module Apache mod_cgi (mod_cgid lors de l'exécution d'un serveur Apache avec des threads). . il est pris en charge par la quasi-totalité des serveurs Web. Apache contient un fichier mime. La réponse est alors envoyée au client.schema <Location /xml-schemas/> ForceType text/xml </Location> Comme pour les gestionnaires de contenu. Apache accepte les CGI. les types MIME peuvent être associés à certaines extensions de fichiers ou URL. qui la traite et renvoie une réponse.xml . Cet exemple montre comment associer le type MIME text/xml aux fichiers se terminant par .types qui comprend les types MIME les plus communs et leurs extensions associées. Il s'agit d'un protocole standard utilisé par les serveurs Web pour communiquer avec des programmes externes. Les bases de l'exécution des scripts CGI CGI signifie Common Gateway Interface (interface de passerelle commune). Par défaut.Configuration des types MIME 69 Configuration des types MIME AddType text/xml .

Si vous n'utilisez pas cette fonctionnalité. mais renvoie plutôt le résultat de son exécution. <Location> et <Directory> en combinaison avec la directive SetHandler pour indiquer à Apache que le contenu de ces sections constitue des programmes CGI. il est recommandé de la désactiver globalement (voir Chapitre 6). Dans ce cas. La directive ScriptAlias est semblable à la directive Alias (décrite plus tôt dans ce chapitre). De même.pl"> Options +ExecCGI SetHandler cgi-script </Location> . Désignation de ressources comme des CGI exécutables ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin Cette section présente plusieurs manières d'indiquer à Apache que le fichier cible d'une requête particulière est un script CGI. Cela est nécessaire pour éviter qu'Apache n'envoie directement le contenu d'un fichier au client. à la seule différence qu'Apache traite chaque fichier du répertoire cible comme étant un script CGI. vous devrez également fournir une directive Options +ExecCGI pour indiquer à Apache que l'exécution du CGI est autorisée.pl comme des scripts CGI : <Location "/cgi-bin/*.70 CHAPITRE 4 Mappage d'URL et contenu dynamique Attention ! Des programmes CGI d'exemple ou mal écrits peuvent constituer un risque pour la sécurité. L'exemple suivant demande à Apache de considérer toutes les URL se terminant par une extension de fichier . vous pouvez utiliser n'importe laquelle des sections <Files>.

d'extensions de fichiers. 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). b La directive Script associe certaines méthodes de requête HTTP à un programme CGI.cgi Outre les directives mentionnées dans la section précédente. Comme dans l'exemple de la section précédente. . Apache en propose certaines qui simplifient l'association de types MIME spécifiques. voire de méthodes HTTP spécifiques. le répertoire contenant le CGI de destination doit être désigné comme autorisant l'exécution de CGI avec une directive ScriptAlias ou le paramètre ExecCGI de la directive Options. qui figure dans la distribution de base et qui est compilé par défaut. Le premier est un gestionnaire ou un type de contenu MIME . à un CGI particulier.Association de scripts à des méthodes HTTP et des types MIME 71 Association de scripts à des méthodes HTTP et des types MIME # Traitement de toutes les images GIF via un script CGI # avant de les servir Action image/gif /cgi-bin/filter.cgi # Association de méthodes HTTP spécifiques à un script # CGI Script PUT /cgi-bin/upload. Le module mod_actions. présentées dans cet exemple : b La directive Action accepte deux arguments. propose les directives Action et Script. le second pointe vers le programme CGI pour gérer la requête.

mod_perl et FastCGI sont deux solutions à ce problème. disponible pour Apache 1. il est à noter que le module mod_cgi propose la directive ScriptLog pour aider au débogage des scripts CGI. Le fichier peut rapidement grossir. Tous deux exigent toutefois un examen minutieux du code existant. en plus de la nécessité de démarrer et d'arrêter des programmes à chaque requête. il conservera des informations pour chaque échec d'exécution CGI.3 et 2. vous ne pourrez plus supposer que les ressources seront automatiquement libérées par le système d'exploitation après que la requête aura été desservie. dans lequel les CGI Perl existants peuvent . En plus d'une API puissante pour les éléments internes à Apache. les variables POST. En effet. notamment les en-têtes HTTP. etc. S'il est activé. mais vous pouvez en limiter la taille grâce aux directives ScriptLogBuffer et ScriptLogLength.0. Amélioration des performances du script CGI L'un des principaux inconvénients du développement de CGI réside dans l'impact qu'il a sur les performances.72 CHAPITRE 4 Mappage d'URL et contenu dynamique Dépannage relatif à l'exécution des scripts CGI ScriptLog logs/cgi_log En plus des modules et des techniques présentés aux Chapitres 2 et 3. mod_perl est un module. mod_perl bénéficie d'un mode de compatibilité CGI. Il intègre un interpréteur Perl dans le serveur Web Apache.

Vous en saurez plus sur la prise en charge de SSI par Apache à l'adresse http://httpd.0/howto/ssi. SSI fonctionne en intégrant des instructions de traitement spécifiques dans des pages Web et en les évaluant avant que le contenu ne soit renvoyé au client. was last modified Sunday.3 et 2.shtml.org/ docs/2. un prédécesseur d'autres langages intégrés HTML.0 utilise SSI pour personnaliser les messages d'erreur. . 14-Sep-2005 12:03:20 PST SSI est une technologie Web simple. sample.com.SSI 73 s'exécuter avec peu. SSI fournit un mécanisme simple et efficace pour ajouter facilement des éléments de contenu dynamique. de la "vieille école". SSI Document on disk This document. aucune pénalité n'est appliquée au démarrage.x à l'adresse http://www. la distribution Apache 2. voire pas. FastCGI a regagné de la popularité après avoir été utilisé dans les structures de développement Web comme Ruby-on-Rails.apache. Vous trouverez les spécifications et pourrez télécharger les modules pour Apache 1.fastcgi. <!--#echo var="DOCUMENT_NAME" -->. Autre exemple. de modification.html. FastCGI est un standard qui permet à une même instance d'un programme CGI de répondre à plusieurs requêtes au fil du temps. was last modified <!--#echo var="LAST_MODIFIED" --> Content received by the browser This document. comme PHP. par exemple un pied de page commun à chaque page indiquant la date et l'heure auxquelles la page a été servie. Les scripts s'exécutant à l'intérieur d'un interpréteur qui persiste dans le processus.

comme les CGI et les documents SSI. les variables seront disponibles pour les scripts CGI et les pages SSI et pourront être consignées ou ajoutées à un en-tête. distribué avec Apache. Les variables d'environnement peuvent également être utilisées pour la communication entre modules et pour baliser certaines requêtes à des fins de traitement spécifique. . La manière la plus simple de le configurer consiste à associer une extension au gestionnaire de contenu server-parsed. comme indiqué dans l'exemple.shtml La fonctionnalité SSI est apportée par le module mod_include.shtml AddHandler server-parsed . Ainsi.74 CHAPITRE 4 Mappage d'URL et contenu dynamique Configuration de SSI AddType text/html . Vous pouvez paramétrer les variables d'environnement à l'aide de la directive SetEnv. Paramétrage des variables d'environnement SetEnv foo bar UnSetEnv foo PassEnv foo Les variables d'environnement sont des variables qui peuvent être partagées entre des modules et qui sont également disponibles pour des processus externes. Par exemple : SetEnv foo bar créera la variable d'environnement foo et lui affectera la valeur bar.

Cette variable contient un chemin vers des bibliothèques dynamiques chargeables dans certains systèmes UNIX. tapez : <!--#echo var="foo" --> Sa valeur peut être consignée avec l'option de mise en forme %{foo}e (voir Chapitre 3) ou ajoutée à un en-tête HTTP (voir Chapitre 10). le fichier demandé ou une valeur d'en-tête HTTP spécifique.Paramétrage dynamique des variables d'environnement 75 A l'inverse. Par exemple : PassEnv LD_LIBRARY_PATH mettra la variable d'environnement LD_LIBRARY_PATH à disposition des scripts CGI et des pages SSI. à l'aide de la directive UnsetEnv. . comme le nom d'utilisateur. avec : RequestHeader set X-Foo "%{foo}e" Paramétrage dynamique des variables d'environnement SetEnvIf HTTP_USER_AGENT MSIE iexplorer SetEnvIf HTTP_USER_AGENT MSIE iexplorer=foo SetEnvIf HTTP_USER_AGENT MSIE !JavaScript La directive SetEnvIf permet de paramétrer des variables d'environnement en fonction des informations de la requête. Accès à une variable d'environnement Pour accéder à une variable d'environnement nommée foo dans une page SSI. Enfin. comme Linux. la directive PassEnv permet d'exposer des variables à partir de l'environnement de traitement du serveur. vous pouvez supprimer des variables spécifiques.

vous pourrez rechercher l'existence et la valeur de cette variable pour réaliser diverses actions. Cet exemple concerne les navigateurs Microsoft Internet Explorer. d'envoyer des pages HTML simplifiées à des navigateurs texte. ou à des navigateurs sur téléphones portables et assistants personnels. par exemple. qui permet d'écrire simplement : BrowserMatch MSIE iexplorer=1 Info SetEnvIf et BrowserMatch proposent des versions non sensibles à la casse (SetEnvIfNoCase et BrowserMatchNoCase) qui peuvent être utilisées pour simplifier les expressions régulières dans certaines situations. Il est possible. comme Lynx. Par la suite. Il montre comment paramétrer une variable. qui sera modifié si le paramètre correspond à l'expression. comme la consignation d'une requête spécifique ou l'envoi d'un contenu différent en fonction du type de navigateur. En réalité. Elles servent généralement à passer outre .76 CHAPITRE 4 Mappage d'URL et contenu dynamique Cette directive prend un paramètre de requête. lui affecter une valeur arbitraire foo et même lui affecter une expression de négation. Si l'une d'elles est définie. la recherche de l'agent utilisateur du client est tellement commune que le module mod_setenvif propose la directive BrowserMatch. Apache modifie son comportement. Variables d'environnement spéciales BrowserMatch "Mozilla/2" nokeepalive Apache propose un ensemble de variables d'environnement spéciales. une expression régulière et un ensemble de variables.

De fait. un client peut vous informer qu'il est capable d'accepter un contenu compressé (même si sa langue de préférence est l'anglais. Ainsi. Par exemple. Il s'agit du format dans lequel une ressource est conservée ou représentée.txt. . il comprendra également les pages écrites en espagnol).utf8 AddLanguage en . le fichier listing. Par exemple. Il peut généralement être déterminé à partir de l'extension du fichier. Négociation du contenu AddCharset UTF-8 .gz Le protocole HTTP propose des mécanismes permettant de conserver différentes versions d'une ressource donnée et de renvoyer le contenu approprié en fonction des capacités et des préférences du client. la variable nokeepalive désactive la prise en charge du maintien en activité dans Apache. qui réduit les performances du serveur (plusieurs requêtes ne pouvant pas être transmises sur la même connexion).en AddEncoding gzip . généralement à l'aide de l'une des directives BrowserMatch ou SetEnvIf. Les Chapitres 7 et 8 proposent des exemples de variables spéciales utilisées pour contourner des problèmes dans les implémentations SSL et DAV. Les trois principaux aspects négociés sont les suivants : b Le codage. comme on le voit dans l'exemple.Négociation du contenu 77 des clients qui présentent des bogues.gz possède un type MIME text/plain et un codage gzip. elle ne doit être paramétrée que lorsque la requête est réalisée par un client qui ne prend pas correctement en charge cette fonctionnalité.gzip . Le codage de la ressource sera annexé à l'en-tête Content-Encoding: de la réponse.

la documentation Apache propose index. Par exemple.var Il existe deux méthodes principales pour configurer la négociation du contenu dans Apache : le mode Multiviews et les correspondances de type (type maps). Vous pouvez proposer différentes versions de la même ressource. Le jeu de caractères de la ressource sera annexé à l'en-tête Content-Type: de la réponse. pour chaque requête.en.78 CHAPITRE 4 Mappage d'URL et contenu dynamique b Le jeu de caractères.html. La langue de la ressource sera annexée à l'en-tête Content-Language: de la réponse. excepté pour les sites Web simples.de. Cette propriété décrit le jeu de caractères utilisé par un document. Nous déconseillons cette méthode. . à la recherche de documents analogues contenant d'autres extensions. avec le type MIME.html. L'exemple montre comment associer des jeux de caractères. b La langue. elle analyse le répertoire contenant le fichier. index . Le mode Multiviews peut être activé en ajoutant une directive Options +Multiviews à une configuration. etc. Configuration de la négociation du contenu Options +Multiviews AddHandler type-map . En effet.es. car elle n'est pas très efficace. index. puis pour renvoyer le contenu approprié. Elle construit alors une liste de ces fichiers et utilise des extensions pour déterminer le codage du contenu et le jeu de caractères. des langues et des codages à des extensions de fichiers particulières.html.

suivi de plusieurs attributs comme Content-Type:.fr Content-type: text/html. Il s'agit de fichiers spéciaux qui mettent en correspondance les noms de fichiers et les informations (métadonnées) les concernant.var.Configuration de la négociation du contenu 79 Il vaut mieux employer les correspondances de type.html. Content-Language: et Content-Encoding:). Le Listing 4.html. qui limitent les recherches sur le système de fichiers. Chacune commence par URI: (c'est-à-dire le nom du document. Le fichier peut contenir plusieurs entrées. puis en ajoutant une directive AddHandler (comme indiqué dans la configuration d'exemple).1 Contenu d'un fichier de correspondance de type URI: page. .1 montre un exemple de fichiers de correspondance de type. Listing 4. charset=iso-8859-2 Content-language: fr Astuce N'oubliez pas que l'utilisation d'un type de négociation de contenu affecte les performances du serveur Web.en Content-type: text/html Content-language: en URI: page. Vous pouvez configurer une correspondance de type pour une ressource donnée en créant un fichier portant le même nom et l'extension . car cela nécessite des accès supplémentaires au système de fichiers.

Enfin. il sera envoyé . Dans cet exemple. à l'aide de AddDefaultCharset. Une autre option consiste à spécifier AddDefaultCharset Off pour désactiver l'ajout d'un jeu de caractères aux documents qui n'en possèdent pas.org /docs/2.org/docs/2. le paramètre serait en. Apache recherchera un document en espagnol.apache. Pour un site Web en anglais. . si un document en anglais est trouvé. Vous pouvez également choisir une langue par défaut grâce à la directive DefaultLanguage. vous pouvez utiliser LanguagePriority pour déterminer l'ordre de préférence des langues.html.0/mode /mod_negotiation.html et http://httpd. comme indiqué dans l'exemple.80 CHAPITRE 4 Mappage d'URL et contenu dynamique Affectation de jeux de caractères par défaut et de priorités de langue DefaultLanguage en AddDefaultCharset iso-8859-1 LanguagePriority en es de Il est possible de désigner un jeu de caractères par défaut pour les documents n'en disposant pas. si le client n'adopte aucune préférence de langue.0/mod/mod_mime. sinon. comme indiqué dans l'exemple. Vous en saurez plus sur ce sujet en vous rendant aux adresses suivantes : http://httpd.apache. S'il n'en trouve pas. il recherchera un document en allemand.

html. mod_rewrite. Vous en saurez plus sur mod_rewrite en vous rendant à l'adresse http://httpd. au Chapitre 2. Du fait de sa complexité. comme expliqué dans la section "Les redirections ne fonctionnent pas". Cette situation apparaît si vous ne chargez pas mod_dir dans le serveur ou lorsque les redirections réalisées par mod_dir ne fonctionnent pas correctement avec la valeur spécifiée dans la directive ServerName. Le répertoire peut contenir .0/mod/ mod_rewrite. d'ajouter une barre oblique ("/") à la fin de l'URL. lorsque vous accédez à certaines URL correspondant à des répertoires. ErrorDocument et Alias.org/docs/2.Mappage avancé d'URL avec mod_rewrite 81 Mappage avancé d'URL avec mod_rewrite Apache propose un module très puissant. qui permet de manipuler les URL de manière quasi illimitée à l'aide des expressions régulières. ce module ne sera pas traité dans cet ouvrage autrement que dans une référence spécifique ou dans des exemples d'autres chapitres. Problème de l'oubli de la barre oblique finale DirectorySlash On Certaines URL ne peuvent fonctionner que si elles possèdent une barre oblique de fin. Il est mentionné ici pour information.apache. N'oubliez pas. au cas où vous atteigniez un jour les limites des directives Redirect.

Ainsi. . Cet oubli est une erreur courante. Cela est très fréquent lorsque les utilisateurs tapent l'URL dans le navigateur. une requête pour http://exemple. Par exemple. et évite les requêtes vers des liens cassés. file.htm.com/foo sera redirigée vers http://exemple.0 lorsque mod_dir est chargé dans le serveur. Cela affecte les performances. etc. à l'aide d'une directive DirectorySlash : DirectorySlash Off Correction des fautes de frappe CheckSpelling on mod_speling est un module Apache qui reconnaît les URL mal orthographiées et redirige l'utilisateur vers l'emplacement correct du document.) et le renvoie s'il le trouve. si mod_dir est activé sur le serveur et que vous disposez d'un répertoire nommé foo sous la racine de document. mod_speling est capable de corriger les URL dont la casse est erronée ou dont une lettre manque (ou est incorrecte). mod_speling recherche alors un document analogue (comme FILE. quand mod_dir "imagine" que cela peut être le cas. supposons qu'un utilisateur demande le fichier file. Sous Apache 2.82 CHAPITRE 4 Mappage d'URL et contenu dynamique un fichier d'index ou un index de répertoire. vous pouvez désactiver cette redirection.HTML. il procède à la redirection appropriée.3 et 2.com/foo/. Par exemple.html mais que celui-ci ne soit pas présent. Il s'agit du comportement par défaut sous Apache 1. mais peut être assez utile.

comme http://www. commencent à renvoyer des erreurs du type "Document Not Found". au fichier icon. Ce module.PNG.PNG demandé. le module en renvoie une liste. En effet. Résolution des problèmes de casse NoCase on Windows possède un système de fichiers non sensible à la casse. à objectif unique. Ce problème peut être résolu en vérifiant et en réécrivant manuellement chaque lien. toutefois ! Cela pourrait présenter des risques pour la sécurité.Résolution des problèmes de casse 83 Pour activer la vérification orthographique.com/images/icon. il tente .png et n'est pas équivalent. Info S'il existe plusieurs documents ressemblant à une adresse mal orthographiée. Il recherche une correspondance exacte . Des URL. qui fonctionnaient bien sous Windows. vous pouvez ajouter CheckSpelling on à votre configuration Apache. comme indiqué à la section précédente. comme indiqué dans l'exemple. à la différence de la plate-forme UNIX. Il existe également un autre module. ou en activant le module mod_speling. crée une requête GET pour des URL non sensibles à la casse. Attention. Cela crée généralement des problèmes lors de la migration de sites Web entre les deux systèmes. ces fichiers ne pouvant pas tous être proposés au public. le fichier sur disque s'intitule icon. pouvant être utilisé dans ce but : mod_nocase. initialement fondé sur mod_speling. sous UNIX. s'il ne la trouve pas.exemple.

vous devez le charger dans le serveur et inclure une directive NoCase dans votre fichier de configuration Apache. Tidy est un outil de ligne de commande utile. comme indiqué dans l'exemple. comment utiliser la directive SetFilter pour associer un filtre Tidy à des fichiers XML et HTML. si elles contiennent des erreurs de marquage. et d'autre part . capable de traiter les codes HTML et XML mal formés. Cet exemple montre. Pour activer mod_nocase. Vous pouvez exécuter Tidy à partir de la ligne de commande sur des fichiers statiques. Validation de pages avec Tidy AddOutputFilterByType TIDY text/html application/ xhtml+xml TidyOption char-encoding utf8 Indépendamment du fait que vous ayez généré vos pages HTML de manière dynamique ou que vous les ayez codées à la main. l'activation de mod_speling ou de mod_nocase diminue les performances du serveur.com/Software/mod_nocase. mod_nocase peut être téléchargé à l'adresse http://www .sourceforge.84 CHAPITRE 4 Mappage d'URL et contenu dynamique une correspondance non sensible à la casse. Attention. le contenu traité étant desservi à la volée. il est possible qu'elles ne s'affichent pas correctement dans tous les navigateurs. grâce à mod_tidy et à l'architecture de filtre Apache 2. d'une part. le premier est automatiquement sélectionné.net/. de corriger de nombreuses erreurs communes et de produire une sortie conforme aux standards. Si plusieurs fichiers correspondent à la recherche non sensible à la casse. Vous le trouverez à l'adresse http://tidy.htm.misterblue.

mod_validator.webthing.snafu. Vous pouvez télécharger mod_tidy à l'adresse http:// home. .com/ software/mod_validator/.de/tusk/mod_tidy/. peut être téléchargé à l'adresse http://www. Un autre module d'Apache 2. L'architecture de filtre et la configuration d'Apache sont décrites au Chapitre 11.Validation de pages avec Tidy 85 comment employer TidyOption pour configurer le comportement du moteur Tidy.

.

5 Hébergement virtuel Ce chapitre explique comment héberger plusieurs sites Web grâce à une seule instance du serveur Apache. Un autre avantage réside dans la possibilité de centraliser l'administration et d'optimiser l'utilisation des . chacun étant identifié par un ou plusieurs domaines. à l'aide d'une seule instance d'un serveur. Définition de l'hébergement virtuel L'hébergement virtuel est une fonction que proposent la plupart des serveurs Web modernes. Il traite également de sujets liés à l'hébergement de plusieurs utilisateurs. en utilisant à la fois un hébergement virtuel fondé sur le nom et un hébergement virtuel fondé sur l'adresse IP. Cela permet de desservir des sites Web variés. par exemple avec les répertoires d'accueil et les fichiers de configuration par répertoire.

Chaque section <VirtualHost> contient des directives de configuration qui seront appliquées aux requêtes envoyées à l'adresse IP (et. en option. Hébergement virtuel basé sur IP <VirtualHost 192. Info En cas d'écoute sur des ports non standard.88 CHAPITRE 5 Hébergement virtuel ressources du système. au numéro de port) spécifiée dans la balise ouvrante. . De nombreux fournisseurs d'hébergement pour des sites Web commerciaux peuvent répondre à des centaines de clients à l'aide d'une seule instance de serveur. le serveur Apache qui s'exécute doit avoir été configuré avec ces adresses IP. Attention. il ne suffit pas qu'ils soient listés dans la section <VirtualHost> pour qu'Apache écoute leurs requêtes.4:80> (…) </VirtualHost> La manière la plus facile d'assurer un hébergement virtuel consiste à employer une combinaison adresse IP/port à laquelle le client se connecte. n'oubliez pas de fournir une directive Listen pour chacun d'entre eux. évitant ainsi de gérer des centaines de serveurs Apache en arrière-plan. Apache peut être configuré pour accepter un hébergement virtuel basé sur IP à l'aide des sections <VirtualHost>. L'hébergement virtuel basé sur IP présente toutefois l'inconvénient de devoir affecter une adresse IP différente à chaque hôte virtuel. Bien entendu.200.168.

Pour cela.com </VirtualHost> . La directive ServerName figurant dans chaque section sert à construire des URL autoréférentielles. La directive DocumentRoot précise l'emplacement du contenu du site Web pour chaque hôte virtuel. Vous devrez donc toujours fournir les directives Listen appropriées. Il est également possible de préciser un caractère joker ("*") pour écouter les requêtes dans tous les ports qu'écoute Apache. celui précisé dans la directive Apache la plus récente sera utilisé.1 Configuration d'hôtes virtuels basés sur IP Listen 8080 Listen 80 <VirtualHost 192. Les adresses et les ports répertoriés dans la balise ouvrante d'une définition <VirtualHost> n'auront pas d'effet sur les adresses ou les ports qu'écoute Apache.exemple. desservant un contenu pour trois sites Web : www. dans la section d'hôte virtuel (voir Chapitre 3). Si aucun port n'est spécifié dans une définition <VirtualHost>.com et www. Listing 5. une version intermédiaire de www.com DocumentRoot /usr/local/Apache/sites/exemple.com.200.168.1 montre trois hôtes virtuels basés sur IP. Il est également possible de consigner les requêtes et les erreurs pour chaque hôte virtuel dans un fichier différent.net.exemple.Configuration de l'hébergement virtuel basé sur IP 89 Configuration de l'hébergement virtuel basé sur IP L'exemple du Listing 5. comme TransferLog et ErrorLog.2> ServerName www.exemple.net. il convient de placer des directives de consignation.exemple. comme indiqué dans l'hôte virtuel exemple.

com DocumentRoot /usr/local/Apache/sites/staging </VirtualHost> <VirtualHost 192. Cela sera notamment le cas si vous souhaitez gérer plusieurs sites Web personnels sur votre propre serveur via une ligne DSL. Il est ainsi possible de choisir les informations à présenter à l'utilisateur en fonction des données de la requête HTTP.net DocumentRoot /usr/local/Apache/sites/exemple. C'est une exigence du protocole HTTP/1.200.200.exemple.0.2:8080> ServerName www.net </VirtualHost> Hébergement virtuel basé sur le nom Nous l'avons vu. plutôt que d'afficher les données de la connexion elle-même. L'hébergement virtuel basé sur le nom est utile car la plupart des navigateurs réputés (et la quasi-totalité des navigateurs récents) transmettent un en-tête Host: dans leur requête HTTP. Cela permet à plusieurs hôtes virtuels de partager la même combinaison adresse IP/port.4:*> ServerName www. Cela génère un certain nombre de problèmes si vous devez héberger un grand nombre de sites ou que vous ne puissiez pas ou ne vouliez pas payer plusieurs adresses IP.1.168. . l'hébergement virtuel IP nécessite une adresse IP différente pour chaque site Web.168.exemple. mais cela apparaît également dans la plupart des implémentations de HTTP/1.90 CHAPITRE 5 Hébergement virtuel <VirtualHost 192.

168. L'exemple du Listing 5. ainsi qu'à tous les noms d'hôtes supplémentaires fournis par la directive ServerAlias. en fonction de la valeur de l'en-tête Host: de la requête HTTP. Listing 5. au nom d'hôte fourni par ServerName.com DocumentRoot /usr/local/Apache/sites/exemple.200. avec : NameVirtualHost * .net DocumentRoot /usr/local/Apache/sites/exemple.Configuration de l'hébergement virtuel basé sur le nom 91 Configuration de l'hébergement virtuel basé sur le nom La configuration des hôtes virtuels par noms est semblable à celle des hôtes virtuels IP.2 montre deux hôtes virtuels partageant l'adresse IP 192.168.168.com Web.exemple.2> ServerName www. à des fins de correspondance.net </VirtualHost> La directive NameVirtualHost est nécessaire pour indiquer à Apache qu'une adresse IP particulière servira pour les hôtes virtuels basés sur le nom.200.2> ServerName www.200.168.com </VirtualHost> <VirtualHost 192.2.com ServerAlias exemple. Elle sera comparée. qui sont optionnels. Vous pouvez indiquer à Apache d'utiliser n'importe quelle adresse IP disponible pour l'hébergement virtuel basé sur le nom.2 <VirtualHost 192.200.exemple. Apache déterminera l'hôte virtuel vers lequel"router" la requête.exemple.2 Configuration d'hôte virtuel basée sur le nom Listen 80 NameVirtualHost 192.

Dans le cas d'un hébergement virtuel basé sur le nom.html.2.3) à la racine . il peut être utile de configurer cet hôte virtuel. vous pouvez placer ce fichier (default.com soient résolus sur l'adresse 192. c'est le premier hôte virtuel basé sur le nom qui prendra le pas. </VirtualHost> Nous l'avons indiqué dans la section précédente.exemple.com.200. Il renverra ainsi une page proposant une liste des sites Web disponibles dans la machine. exemple. ou bien donnera les raisons pour lesquelles ce site Web particulier n'est pas reconnu. basé sur le nom NameVirtualHost * <VirtualHost *> .92 CHAPITRE 5 Hébergement virtuel Bien entendu.. Pour cela..168. elle sera desservie par le serveur principal dans le cas d'un hébergement virtuel basé sur IP. Si vous hébergez plusieurs sites. vos serveurs DNS doivent être correctement configurés pour que les domaines www. Que se passe-t-il si une requête ne correspond à aucun hôte virtuel ? Si une requête ne correspond à aucun hôte virtuel.com et Web. dans l'exemple du Listing 5. Consultez les deux sections suivantes pour en savoir plus sur la configuration d'un hôte virtuel "tous usages" par défaut. c'est le premier hôte virtuel présent dans le fichier de configuration qui répond aux requêtes du domaine non explicitement gérées par d'autres hôtes virtuels. Configurer un hôte virtuel par défaut.exemple.

exemple. extrait de la configuration mod_ssl par . puis rediriger toutes les requêtes qui lui sont adressées à l'aide d'une directive AliasMatch.3 Configuration d'un hôte virtuel par défaut basé sur le nom NameVirtualHost * # La section ci-après doit être placée au-dessus de toute autre section d'hôte virtuel <VirtualHost *> ServerName default.html Vous pouvez également diriger les utilisateurs vers un autre de vos sites Web.com DocumentRoot /usr/local/Apache/sites/default AliasMatch /* /default.com DocumentRoot /usr/local/Apache/sites/default </VirtualHost> La syntaxe spéciale _default_ permet de définir un hôte virtuel qui desservira les requêtes de combinaisons adresse/port qui ne sont pas traitées par d'autres hôtes virtuels.Que se passe-t-il si une requête ne correspond à aucun hôte virtuel ? 93 du document.exemple. Vous pouvez également préciser un numéro de port dans la combinaison. à l'aide du mot clé _default_ (comme dans l'exemple suivant. à l'aide d'une directive Redirect. Listing 5. Vous obtiendrez un effet analogue en remplaçant la directive par une directive ErrorDocument : ErrorDocument 404 /default.html </VirtualHost> Configurer un hôte virtuel par défaut basé sur IP <VirtualHost _default_ > ServerName default.

94 CHAPITRE 5 Hébergement virtuel défaut d'Apache).exemple.168. associés à l'adresse IP 192.4)..2 <VirtualHost 192.200.com </VirtualHost> <VirtualHost 192.200.168. Cet exemple montre deux hôtes virtuels basés sur le nom. pour toutes les adresses qui ne sont pas explicitement gérées par d'autres hôtes virtuels : <VirtualHost _default_:443> SSLEngine on ServerName secure.200.com:443 DocumentRoot /usr/local/Apache/sites/default .168.168.4 Mélange d'hôtes basés sur IP et basés sur le nom NameVirtualHost 192.com DocumentRoot /usr/local/Apache/sites/staging .4. </VirtualHost> Mélange d'hôtes basés sur IP et basés sur le nom Sachez qu'il est également possible de spécifier à la fois des hôtes virtuels basés sur IP et d'autres basés sur le nom (voir Listing 5. associé à l'adresse IP 192. Au lieu d'utiliser NameVirtualHost *. Listing 5.. vous devrez fournir des directives NameVirtualHost séparées pour chaque adresse IP qui sera associée à des hôtes virtuels basés sur le nom.168.200. et un hôte virtuel basé sur IP.200.2. Cet exemple spécifie un hôte virtuel qui écoutera les requêtes sur ce port particulier.com DocumentRoot /usr/local/Apache/sites/exemple.2> ServerName www.exemple.2> ServerName staging.exemple.

Débogage des configurations d'hôtes virtuels

95

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

Débogage des configurations d'hôtes virtuels
Vous pouvez appeler le binaire httpd assorti de l'option -S (voir Listing 5.5) pour qu'Apache analyse le fichier de configuration. Une fois que toutes les informations liées à l'hôte virtuel ont été traitées, ile binaire httpd fournit des informations sur chaque hôte virtuel configuré et chaque valeur d'hôte par défaut. Il s'agit là d'un outil très pratique pour déboguer des configurations d'hôtes virtuels complexes.
Listing 5.5 Vérification de la configuration d'un hôte virtuel

# httpd -S VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: *:* is a NameVirtualHost default server exemple.com (/usr/local/www/conf/httpd.conf:1055) port * namevhost exemple.com (/usr/local/www/conf/httpd.conf:1055) port * namevhost exemple.org (/usr/local/www/conf/httpd.conf:1082) port * namevhost exemple.net (/usr/local/www/conf/httpd.conf:1094) Syntax Ok

96

CHAPITRE 5 Hébergement virtuel

Utilisation de SSL avec des hôtes virtuels basés sur le nom
En bref, SSL ne peut pas être utilisé avec les hôtes virtuels basés sur le nom, car il n'existe pas aujourd'hui de grand navigateur capable de le prendre en charge. Reportez-vous à la section du même nom dans le Chapitre 7 pour en savoir plus.

Alternative à l'hébergement virtuel
UseCanonicalName Off VirtualDocumentRoot /usr/local/Apache/vhosts/%0 VirtualScriptAlias \ /usr/local/Apache/vhosts/%0/cgi-bin

Pour les utilisateurs qui disposent d'un grand nombre d'hôtes virtuels, il peut être souhaitable d'adopter une approche différente d'hébergement. Cela est particulièrement vrai pour les FAI, qui hébergent des milliers de clients. Dans le cas contraire, ils devront enregistrer des informations pour chacun des hôtes virtuels dans le fichier de configuration, puis redémarrer le serveur à chaque modification.
mod_virtualhost_alias vous permet de configurer une

racine de document différente pour chaque hôte virtuel, et ce de manière dynamique. Ainsi, la requête est mise en correspondance avec un chemin donné dans le système de fichiers, en fonction des informations de la requête ellemême (comme l'adresse IP ou le nom d'hôte). Cet exemple met en correspondance les requêtes pour un nom d'hôte particulier avec un chemin dans le système de fichiers qui comprend ce nom d'hôte (représenté par %0 dans le chemin). De même, la directive VirtualScriptAlias permet d'exécuter des scripts CGI dans un chemin de répertoire

Utilisation de SSL avec des hôtes virtuels basés sur le nom

97

basé sur le nom d'hôte référencé dans la requête. Si un utilisateur envoie une requête pour /manual/index.html sur l'hôte www.exemple.com, cette directive sera mise en correspondance avec /usr/local/Apache/vhosts/www.exemple.com/ manual/index.html. De la même manière, vous pouvez effectuer la correspondance avec des adresses IP plutôt que les noms d'hôtes, pour un hébergement virtuel basé sur IP, à l'aide des directives VirtualDocumentRootIP et VirtualScriptAliasIP. Vous pouvez choisir de mettre en correspondance des requêtes en fonction de certaines parties seulement du nom d'hôte ou de l'adresse IP, ou en fonction du port de la requête. Pour cela, vous utiliserez différentes séquences basées sur %, comme %p pour le numéro de port, %1 pour la première partie du domaine, %2 pour la deuxième, et ainsi de suite.

Autres modules d'hébergement virtuel
Le module mod_vhost_alias est probablement l'un des plus populaires parmi les hôtes virtuels de masse, du fait qu'il est intégré dans Apache. Il existe toutefois d'autres solutions, par exemple : b mod_vhost_ldap. Ce module Apache 2 permet de stocker des informations d'hôte virtuel dans un répertoire LDAP. Il peut être téléchargé à l'adresse http:// alioth.debian.org/projects/modvhostldap/. b mod_vhost_dbi. Ce module permet de stocker une configuration d'hôte virtuel dans une base de données SQL, ce qui assure une grande flexibilité. Il s'exécute sur Apache 2. Pour le télécharger, rendez-vous à l'adresse http://www.outforder.cc/projects/Apache/ mod_vhost_dbi/.

98

CHAPITRE 5 Hébergement virtuel

Le Chapitre 11 traite de plusieurs modules de multitraitement (MPM), comme mod_perchild, qui permettent d'exécuter différents hôtes virtuels sous divers identifiants utilisateur.

Fichiers de configuration par répertoire
AccessFilename .htaccess

L'hébergement de plusieurs sites Web pose un problème lié, relatif aux services d'hébergement qui concernent plusieurs clients. Si le nombre de clients est important, il est possible de faire appel à des fichiers de configuration par répertoire. Ce sont généralement des fichiers htaccess (auparavant principalement utilisés pour les tâches de contrôle d'accès). Lorsque cette fonctionnalité est activée, Apache recherche des fichiers de configuration spéciaux dans tous les répertoires menant au fichier demandé. Par exemple, si Apache reçoit une requête pour /usr/local/ apache2/htdocs/index.html, il recherche les fichiers de configuration par répertoire dans /, /usr/, /usr/local/, /usr/local/apache2 et /usr/local/apache2/htdocs, dans cet ordre. S'il en trouve, leur contenu est traité et fusionné avec la configuration principale de httpd.conf au démarrage. Cela est assez pratique pour l'administrateur système, car les utilisateurs peuvent gérer eux-mêmes leurs configurations. De plus, puisque les fichiers sont analysés à la volée, le serveur n'a pas à être redémarré après chaque modification. Inconvénient : cette opération pénalise les performances. En effet, Apache doit procéder à des opérations lourdes sur disque pour rechercher ces fichiers dans chaque requête, et ce, même si les fichiers n'existent pas.

b Options. La directive AllowOverride permet de contrôler le type de directives de configuration pouvant apparaître dans des fichiers de configuration par répertoire. b All. b FileInfo. par exemple. Contrôle de la portée des fichiers de configuration par répertoire AllowOverride Indexes Limit AuthConfig Lorsque . Directives contrôlant l'indexation du répertoire. Vous pouvez. mais pas celles liées à une autorisation. . cela signifie que la directive peut être placée dans des fichiers de configuration par répertoire. Toutes les directives appartenant aux groupes mentionnés précédemment peuvent être employées. Directives d'autorisation. autoriser les utilisateurs à modifier les directives d'indexation de répertoire. Les valeurs possibles sont les suivantes : b Authconfig. Directives de contrôle de l'accès à l'hôte. b Indexes. b Limit.Utilisation de SSL avec des hôtes virtuels basés sur le nom 99 La directive AccessFilename permet de fournir une liste de noms de fichiers qu'Apache étudiera. Directives contrôlant les fonctions spécifiques du répertoire. Directives contrôlant les types de documents. à la recherche des fichiers de configuration par répertoire.htaccess est présent dans le champ Context: de la description de la syntaxe de référence de la directive. Désactiver les fichiers de configuration par répertoire pour cette arborescence de répertoires. b None. que vous trouverez dans la documentation Apache.

. vous pouvez les désactiver à l'aide de la syntaxe présentée ici. Cela augmentera la sécurité et les performances du serveur. aux dépens toutefois de la flexibilité et de la commodité que ces fichiers procurent.100 CHAPITRE 5 Hébergement virtuel Désactivation des fichiers de configuration par répertoire <Directory /> AllowOverride None </Directory> Si vous n'avez pas l'utilité des fichiers de configuration par répertoire.

6 Sécurité et contrôle d'accès Le contrôle d'accès. Il explique également en quoi les différents paramètres de configuration peuvent affecter la sécurité de votre serveur et montre plusieurs étapes que vous pouvez entreprendre pour l'améliorer. de l'authentification et de l'autorisation à l'aide des modules Apache intégrés. et que ceux-ci fournissent. un nom d'utilisateur et un mot de passe valables. . avec des règles de filtrage des paquets. des sessions et des cookies. et celui de l'application Web. Ce chapitre traite exclusivement de l'implémentation du contrôle d'accès. une exigence ? Le contrôle d'accès est une exigence pour de nombreux sites Web. d'autre part. d'une part. Le contrôle d'accès peut être implémenté à divers niveaux : notamment celui du système d'exploitation. Cela implique qu'un certain contenu (ou certaines zones) du site Web soit accessible aux clients provenant d'une plage d'adresses particulière. avec des formulaires. par exemple.

L'authentification basique et digest L'authentification des utilisateurs d'un site Web sert pour des raisons de suivi ou d'autorisation. seront également mentionnés dans ce chapitre. Les deux principaux sont mod_access (qui permet de contrôler l'accès en fonction de l'adresse IP d'origine et d'autres caractéristiques de la requête) et mod_auth (qui authentifie les utilisateurs en fonction d'un nom d'utilisateur et d'un mot de passe).0. Différences existant entre les versions d'Apache La structure des autorisations et des authentifications d'Apache a été totalement remaniée dans Apache 2. La spécification HTTP propose deux mécanismes d'authentification : basique et digest.2.102 CHAPITRE 6 Sécurité et contrôle d'accès Apache propose plusieurs modules permettant de contrôler l'accès au contenu d'un site.2. Pour des raisons de clarté. moins utilisés. mais ne seront pas traités en détail. plus loin dans ce chapitre. Toutefois. plusieurs changements sont visibles pour l'utilisateur. ce chapitre décrit principalement les configurations Apache 1. Même si la plupart des modifications ont été apportées au niveau du code source.2". .3 et Apache 2. si vous souhaitez connaître les changements spécifiques à la version 2. et parce que la plupart des concepts de base continuent de s'appliquer. D'autres modules. consultez la section "Apache 2.

et les réutiliser librement par la suite. car elle ne transmet qu'un résumé (digest). L'authentification digest assure un niveau de sécurité supérieur. et non le mot de passe en clair. 3. Apache vérifie la validité des informations. Le client lit la réponse et demande à l'utilisateur son nom et son mot de passe (généralement dans une fenêtre contextuelle). dans le cadre des en-têtes de la requête HTTP. le nom d'utilisateur et le mot de passe sont transmis en texte clair. une personne malveillante pourrait facilement espionner la conversation entre le serveur et le navigateur. le processus est le suivant : 1. Si ce n'est pas le cas. 5.L'authentification basique et digest 103 Dans les deux cas. Dans l'authentification de base. . intercepter le nom d'utilisateur et le mot de passe. Un algorithme digest est une opération mathématique qui extrait un texte et en renvoie un autre qui identifie uniquement le texte d'origine. En effet. cette fois en transmettant le nom d'utilisateur et le mot de passe dans le cadre de la requête HTTP. Un client tente d'accéder à un contenu protégé sur le serveur Web. 4. puis accorde ou refuse l'accès selon l'identité de l'utilisateur et d'autres règles d'accès. Le client tente à nouveau d'accéder à la page Web. Cette situation implique un risque pour la sécurité. Apache examine si le client fournit un nom d'utilisateur et un mot de passe. Le client retient le nom d'utilisateur et le mot de passe et les transmet dans les prochaines requêtes vers le même site. pour que l'utilisateur n'ait pas besoin de les saisir à chaque requête. 2. indiquant que l'utilisateur doit s'authentifier. il renvoie un code de situation "HTTP 401".

168. Les directives Deny précisent celles qui seront refusées. à la fois pour l'authentification basique ou digest.exemple. Dans tous les cas. avec mod_access. les réseaux et les noms d'hôtes qui ont accès au contenu.com </Directory> L'exemple montre un extrait de configuration utilisant un contrôle d'accès basé sur le nom d'hôte et IP.0 exemple. Présentation du contrôle d'accès Apache <Directory /usr/local/apache2/htdocs/private> Order Allow. le mot de passe et la méthode de requête. Malheureusement. Le serveur peut calculer le digest lui-même et vérifier que le client connaît le mot de passe. Deny Allow from 192. la directive Order Allow. comme le nom d'utilisateur.Deny précise que les directives Allow doivent être évaluées en premier.104 CHAPITRE 6 Sécurité et contrôle d'accès Si le texte change. Cet ordre est important ! . Les directives Allow précisent les adresses IP individuelles. le digest change également. Pour mieux sécuriser l'accès à votre site Web. Dans cet exemple. même quand celui-ci n'est pas transmis sur le réseau.com Deny from guest-terminal. et les directives Deny en dernier. La directive Order indique la méthode d'évaluation des directives Allow et Deny. les informations demandées sont transmises sans protection sur le réseau. utilisez plutôt SSL (voir Chapitre 7). même si cette spécification existe depuis un certain temps. les navigateurs n'acceptent pas tous l'authentification digest ou le font de manière non compatible. Le digest est fondé sur une combinaison de plusieurs paramètres.

Configuration des autorisations et des authentifications Apache <Directory /usr/local/apache2/htdocs/private> AuthType Basic AuthName "Password Protected Area" AuthUserFile /usr/local/apache2/conf/htusers Require user admin </Directory> Ce listing présente un extrait de configuration qui protège un répertoire à l'aide d'un mot de passe. Ce texte sera présenté à l'utilisateur lorsque le navigateur lui demandera un mot de passe (généralement dans une fenêtre contextuelle séparée). et d'autres pour combiner un contrôle d'accès basé sur l'utilisateur et sur IP. Le fonctionnement du contrôle d'accès peut vous laisser perplexe. la directive Require spécifie un utilisateur auquel sera accordé un accès en cas d'authentification réussie. Les sections suivantes donnent plus de détails sur cet exemple. Ne vous inquiétez pas. l'accès lui sera refusé par défaut. .Configuration des autorisations et des authentifications Apache 105 Order Allow. AuthUserFile pointe vers la base de données utilisateur. il est très facile à maîtriser une fois que vous avez compris comment sont évaluées les directives. AuthType définit le type d'authentification : dans ce cas. AuthName associe un texte à la zone qui sera protégée par le mot de passe. Enfin. comme indiqué à la section "Combinaison des méthodes de contrôle d'accès".Deny s'assure que si le client ne correspond pas à une directive Allow. Vous y trouverez également des instructions pour créer et manipuler la base de données utilisateur. c'est une authentification HTTP basique.

vous pouvez employer l'utilitaire htpasswd inclus dans Apache. voici la syntaxe sous UNIX : htpasswd file userid et sous Windows : htpasswd.106 CHAPITRE 6 Sécurité et contrôle d'accès Création d'une base de données utilisateur htpasswd -c file userid Pour créer une base de données utilisateur (aussi appelée fichier de mots de passe). A titre d'exemple.exe -cm file userid Pour ajouter un nouvel utilisateur à un fichier de mots de passe existant. La syntaxe permettant de créer un nouveau fichier de mots de passe et d'y ajouter un utilisateur sous UNIX est présentée dans l'exemple.exe -m file userid Vous devrez également faire figurer le mot de passe qui sera ajouté à la base de données des utilisateurs. la ligne suivante crée un fichier de mots de passe nommé htusers et ajoute un utilisateur nommé admin : htpasswd -c /usr/local/apache2/conf/htusers admin . vous devrez utiliser : htpasswd. Ne conservez pas le fichier de mots de passe dans un répertoire accessible par le Web. cela détruirait le contenu précédent. Sous Windows. N'utilisez pas non plus -c lorsque vous ajoutez des utilisateurs à un fichier existant .

Elle pointe vers un fichier contenant des informations de groupe. employez la directive AuthGroupFile. vous pouvez les répertorier de manière explicite dans les arguments de Require : Require user idutil1 idutil2 En revanche. au format suivant : nomgroupe: idutil1 idutil2 idutil3 [. qui s'identifie avec succès. .Emploi de Require pour autoriser des utilisateurs et des groupes 107 Emploi de Require pour autoriser des utilisateurs et des groupes <Directory /usr/local/apache2/htdocs/private> AuthType Basic AuthName "Password Protected Area" AuthUserFile /usr/local/apache2/conf/htusers AuthGroupFile /usr/local/apache2/conf/groups Require group administrators </Directory> Vous pouvez demander à Apache d'autoriser l'accès à tout utilisateur valide dans la base de données.] Par exemple : administrators: admin patron users: admin patron util1 util2 L'exemple affiché au début de cette section montre un extrait de configuration qui offre l'accès aux seuls utilisateurs ayant réussi à s'authentifier et appartenant au groupe administrators. si vous disposez d'un grand nombre d'utilisateurs. Dans cet exemple.. en tapant : Require valid-user S'il ne s'agit que d'un certain groupe d'utilisateurs. il s'agirait des utilisateurs admin et patron.

0 </Directory> Il est quelquefois souhaitable de limiter l'accès à un certain contenu (comme le site Web interne d'une entreprise) à des adresses IP spécifiques.108 CHAPITRE 6 Sécurité et contrôle d'accès Gestion d'un grand nombre d'utilisateurs <DirectoryMatch /home/*/public_html> AuthType Basic AuthName "Zone privee" AuthDBMUserFile /usr/local/apache2/conf/dbmusers AuthDBMGroupFile /usr/local/apache2/conf/dbmusers AuthDBMAuthoritative on Require group student faculty </DirectoryMatch> Le module mod_auth_dbm équivaut. notamment celles provenant .168. les contreparties de l'outil mod_auth. Deny Allow from 192. mais il conserve les données utilisateur dans une base de données fondée sur un fichier. à mod_auth. adoptez htdbm et dbmmanage. comme indiqué ici. Pour manipuler les fichiers utilisateur et de groupe. AuthDBMUserFile et AuthDBMGroupFile. Autorisation d'accès à des adresses IP spécifiques uniquement <Directory /usr/local/apache2/htdocs/private> Order Allow. Ce module propose plusieurs directives. comme AuthDBMAuthoritative. en termes de fonctionnalités. dont la syntaxe et les fonctionnalités sont équivalentes aux directives en texte brut prévues par mod_auth. Sachez que les données de groupe et d'utilisateur peuvent être stockées dans la même base de données. Cela accélère la recherche des données lorsqu'il existe un grand nombre d'utilisateurs.

0 Refuser l'accès à des adresses IP spécifiques <Directory /usr/local/apache2/htdocs/private> Order Deny.1 à 192.0.2 192.Allow Deny from 192. Consultez la référence de la directive pour en savoir plus.0. Vous pouvez.0. Cela peut servir à bloquer certaines machines ou robots Web responsables de problèmes ou d'abus de bande passante.0.254.Refuser l'accès à des adresses IP spécifiques 109 d'un réseau interne. mais avec des restrictions. La ligne Order Allow. qui utilisent le même code. . La directive Allow peut accepter plusieurs adresses IP individuelles ou une certaine plage d'adresses IP. dans un fichier . refuser l'accès lorsque la requête provient d'une adresse figurant dans une plage d'adresses IP spécifiques.168. Cet exemple donne accès au répertoire /usr/local/apache2/htdocs/private et à ses sous-répertoires uniquement pour les clients dont les adresses IP sont comprises dans la plage 192.Deny Allow from 192. Deny refuse l'accès par défaut . à l'adresse /usr/local/apache2/ htdocs/private : Order Allow.168.5 </Directory> A l'inverse.htaccess. seuls les clients correspondant à la directive Allow se verront accorder l'accès. par exemple.168. Vous pouvez également autoriser l'accès à quelques adresses IP spécifiques seulement.168.168. il est possible d'autoriser un accès général. L'argument transmis à la section Directory doit littéralement correspondre au chemin du système de fichiers qu'utilise Apache pour accéder aux fichiers.

Pour limiter l'accès aux utilisateurs provenant d'une adresse interne spécifique ET fournissant un nom d'utilisateur et un mot de passe. .200. le fichier de configuration montré ici nécessite que les utilisateurs proviennent d'une adresse interne autorisée OU qu'ils fournissent un nom d'utilisateur et un mot de passe valables.168. vous devrez utiliser Satisfy all. plus loin dans ce chapitre.0.0/255.0 AuthType Basic AuthUserFile /usr/local/apache2/conf/htusers AuthName "Ressource restreinte" AuthAuthoritative on Require valid-user Satisfy any </Location> Vous pouvez associer différentes méthodes de contrôle d'accès.255.168.5. à l'exception des clients dont les adresses IP portent les numéros 192.0. Allow et Deny peuvent également restreindre l'accès selon qu'il existe ou non une variable d'environnement. Par exemple.168.110 CHAPITRE 6 Sécurité et contrôle d'accès Cet exemple autorise l'accès au répertoire /usr/local/ apache2/htdocs/private et à ses sous-répertoires à n'importe quelle personne. Combinaison des méthodes de contrôle d'accès <Location /restricted> Allow from 192. à l'aide de la directive Satisfy.255.2 et 192. Le Chapitre 9 propose d'autres manières de restreindre ou de limiter l'accès aux clients dont le comportement est inadapté. comme expliqué à la section "Restriction d'accès fondée sur le type du navigateur".

html . l'utilisateur obtient un message d'erreur généré par le serveur et codé en dur.exemple. vous pouvez rediriger la requête vers une URL externe : ErrorDocument 404 http://www. de trois manières différentes. relativement à la valeur spécifiée dans la directive DocumentRoot.Personnalisation de la page de refus d'accès 111 Personnalisation de la page de refus d'accès Lorsqu'une requête reçoit un refus d'accès du serveur Web. Vous pouvez afficher un message personnalisé à l'attention de l'utilisateur.3 (remarquez ici l'absence de guillemets en fin de chaîne) : ErrorDocument 403 "Vous n'êtes pas autorisé à accéder à ce fichier Vous pouvez également rediriger la requête vers un chemin d'URL local avec un message personnalisé : ErrorDocument 401 /login_failed. à l'aide de la directive ErrorDocument. le fichier transmis à la directive en second argument est un chemin commençant par une barre oblique (/). Vous pouvez personnaliser ce message. Enfin. comme dans les exemples suivants : Avec Apache 2 : ErrorDocument 403 "Vous n'êtes pas autorisé à accéder à ce fichier" Avec Apache 1.com/page _not_found.html Dans ce cas.

Ce mécanisme porte préjudice aux performances. mais il vous évite de donner l'accès aux fichiers de configuration Apache ou aux bases de données utilisateur. l'utilisateur n'a pas fourni le nom et le mot de passe corrects). Vous en saurez plus sur ce problème en vous référant à un article de la base de connaissances de Microsoft. à l'aide de fichiers . vous devrez ajouter : AllowOverride AuthConfig Limit L'instruction permet aux utilisateurs de créer leurs propres fichiers de configuration .aspx?scid=kb.microsoft.htaccess et de placer leurs propres contrôles d'accès et directives liées aux autorisations. Donner le pouvoir aux utilisateurs Si plusieurs utilisateurs publient du contenu dans votre installation Apache. Vous pouvez bien sûr procéder de la même manière pour d'autres codes HTTP communs. Info Certaines versions de Microsoft Internet Explorer (MSIE) ignorent par défaut les messages d'erreur générés par le serveur lorsqu'ils font moins de 512 octets.Q294807. à l'adresse http://support. Dans les sections de répertoire appropriées de votre fichier de configuration Apache. ce qui indique qu'une erreur a été rencontrée lors de la résolution de la requête (par exemple. ou encore de les mettre à jour chaque fois qu'un changement est nécessaire. vous pouvez les autoriser à protéger leur propre répertoire par mot de passe. .com/ default. N'oubliez donc pas de spécifier un message supérieur à cette valeur.en-us.htaccess (voir Chapitre 1).112 CHAPITRE 6 Sécurité et contrôle d'accès Ces exemples font référence à des codes de retour 400 HTTP différents. comme des erreurs de serveur interne.

grâce au paramètre global suivant : <Directory /> AllowOverride none </Directory> Cela présente comme autre avantage d'améliorer les performances. consultez la documentation sur AllowOverride. Vous pouvez également restreindre le type d'options de configuration autorisées.ht"> Order allow. etc. En effet.htaccess et .deny Deny from all </Files> Il existe certains types de fichiers auxquels les visiteurs ne doivent pas avoir accès.htpasswd. Vous pouvez en refuser l'accès à l'aide de paramètres de configuration explicites (tels que ceux présentés ici). les fichiers de configuration par répertoire. Refus d'accès aux fichiers système et sensibles <Files ~ "^\. . inclus par défaut dans la configuration Apache. 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 créés par les éditeurs de texte UNIX. Pour en savoir plus. Apache n'a pas besoin de rechercher l'existence de fichiers de configuration par répertoire pour chaque fichier demandé.Refus d'accès aux fichiers système et sensibles 113 A l'inverse. vous pouvez interdire les changements de configuration par répertoire. et refuser l'accès aux fichiers .

Consultez également la section relative à la restriction d'accès aux listings de répertoires. Sur le même thème. vérifiez que les répertoires contenant des scripts CGI inscriptibles par le superutilisateur uniquement. ou du moins de la restreindre à des répertoires spécifiques. Pour cela.114 CHAPITRE 6 Sécurité et contrôle d'accès Il est également possible d'empêcher le serveur de desservir un certain contenu en le configurant de manière qu'il ne suive pas des liens symboliques. ce module peut quelquefois exposer "par inadvertance" des noms de fichiers non destinés à être publiés. assurez-vous chaque fois que possible que l'arborescence de documents soit en lecture seule. Ils sont désactivés par défaut par la directive Options -IncludesNoExec. tel qu'indiqué dans la documentation. utilisez les arguments FollowSymLinks et SymLinksIfOwnerMatch avec la directive Options. comme cela peut être le cas si une URL mal orthographiée correspond à plusieurs documents. mod_include autorise l'exécution de CGI et de commandes externes à l'aide de SSI. . En effet. Vous pouvez également désactiver mod_spelling (voir Chapitre 4). De même. n'utilisez pas les directives AddHandler pour activer globalement l'exécution CGI de certaines extensions de fichiers. et notamment pas par l'utilisateur sous lequel Apache s'exécute. plus loin dans ce chapitre. Il est conseillé de désactiver leur exécution. Si possible. Dans ce but. Restriction d'exécution de programmes Les programmes CGI peuvent présenter un risque pour la sécurité.

Ces attaques ont pour but d'empêcher le serveur de répondre aux requêtes des utilisateurs. par exemple. pour protéger un contenu des moteurs de recherche ou lorsqu'un robot au comportement indélicat consomme trop de ressources. . Ces méthodes sont expliquées en détail au Chapitre 9. De même. comme le FTP. ou de le limiter. un fichier contenant du code PHP qui serait introduit dans un serveur activé pour PHP). qui traite aussi de la manière d'éviter ou de réduire les attaques de refus de service. Désactivation des listings de répertoire <Directory /usr/local/apache2/htdocs/private> Options -Indexes </Directory> Apache permet de définir des fichiers d'index spéciaux. n'oubliez pas de protéger les répertoires activés par DAV avec un mot de passe et ne mettez surtout pas le contenu du site à disposition par le biais d'autres services. Plusieurs modules et paramètres Apache aident à résoudre ces problèmes en partie. avec la directive DirectoryIndex. Cela peut être nécessaire.Eviter les abus 115 Cela empêchera une personne malveillante de créer un fichier pouvant ensuite être exécuté (par exemple. Eviter les abus Il existe plusieurs manières de restreindre ou de limiter l'accès à tout ou partie de votre site Web. Lorsqu'une requête réalisée par un client correspond à un chemin de répertoire.

comme SSL. Sachez que vous pouvez aussi modifier ou restreindre les informations d'en-tête du serveur. PHP ou mod_perl. peuvent ajouter des entrées supplémentaires à la chaîne de serveurs contenant le nom et la version du module. Nous recommandons sans cesse de réduire la quantité d'informations concernant la configuration du serveur. Vous pouvez désactiver les listings de répertoire en désactivant le module mod_autoindex ou en utilisant la directive Options. Modification de l'en-tête Server: ServerTokens Prod Apache renvoie un en-tête Server: avec chaque requête. qui sont vues par le monde extérieur. Toutefois.htaccess. Même si cela peut être utile au cours du développement ou lors de la mise à disposition d'un référentiel de fichiers.html ou accueil. à l'aide de la directive ServerTokens. sa version et sa plate-forme. D'autres modules présents dans le serveur. modifier la chaîne du serveur n'apportera que peu de . Si aucun fichier n'est trouvé. comme indiqué ici.html) et le renvoie au navigateur.116 CHAPITRE 6 Sécurité et contrôle d'accès Apache recherche l'un de ces fichiers d'index (généralement nommés index. vous pouvez également placer l'exemple dans un fichier . Par défaut. Apache renvoie une page HTML contenant un listing de répertoire. 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. cet en-tête contient des informations sur le nom du serveur. Si les fichiers de configuration par répertoire sont activés.

. L'exemple de ce listing renverra une réponse Forbidden à toute requête réalisée sur les fichiers image (identifiés par leurs extensions à la quatrième ligne RewriteRule) dont l'en-tête HTTP_REFERER ne correspond pas à votre nom de domaine (première ligne RewriteCond).(jpg|jpeg|gif|png|bmp)$ .[F] Il arrive que des personnes se connectent directement depuis leur site Web à des ressources présentes sur votre serveur.com/ [NC] RewriteCond %{HTTP_REFERER} ^http:// [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule \. En outre. appelé hotlinking (vol de bande passante). Empêcher le vol de vos images (hotlinking) RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(www\. un commerçant en ligne a remarqué que la moitié de son trafic (et de sa facture de bande passante) provenait d'autres sites qui se connectaient à ses images (sociétés de cartes de crédit. peut être contré. Vous y parviendrez à l'aide de mod_rewrite.)?exemple\. Par exemple. Ce phénomène. la plupart des outils d'analyse et d'attaque automatisés ignorent ces informations .Empêcher le vol de vos images (hotlinking) 117 sécurité supplémentaire. En effet.). comme des images. Vous pouvez empêcher que des utilisateurs ne se connectent à vos images en exigeant que ce type de requête provienne de votre serveur. pays.. ils recherchent les scripts et les modules vulnérables les uns après les autres. quels que soient la version et le module signalés. des logos ou des fichiers de programmes binaires..

118 CHAPITRE 6 Sécurité et contrôle d'accès certains navigateurs ne pouvant pas envoyer de champ de référence valide (voire aucun). Cet exemple (extrait du fichier de configuration Apache par défaut) montre comment autoriser des méthodes en lecture seule et refuser des requêtes pour toute autre méthode susceptible de modifier le contenu du système de fichiers. Restriction de méthodes HTTP spécifiques <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS PROPFIND> Order allow. comme PUT.allow Deny from all </LimitExcept> </Directory> Vous pouvez contrôler l'accès à votre serveur en fonction de la méthode HTTP de la requête.deny Allow from all </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny. Les deux lignes suivantes restreignent les paramètres de configuration pouvant être modifiés par les utilisateurs. ainsi que d'autres paramètres de sécurité. La section <Limit> permet l'accès par défaut aux méthodes HTTP . d'autres vérifications sont réalisées pour voir si le champ de référence commence par http:// et s'il n'est pas vide (deuxième et troisième lignes RewriteCond). La section <Directory> identifie les répertoires par utilisateur qui peuvent contenir des pages Web (voir Chapitre 8). à l'aide des directives <Limit> et <LimitExcept>.

vous pourrez appliquer de manière conditionnelle les directives Deny et Allow en fonction de l'existence de cette variable d'environnement.Restriction d'accès basée sur le type du navigateur 119 qui sont en lecture seule. Plus tard. sans avoir explicitement à les énumérer.Allow Deny from env=broken_crawler </Directory> Vous pouvez restreindre l'accès en fonction du type du navigateur ou de toute autre information d'en-tête ou propriété de connexion. nommée broken_crawler. comme GET et POST. Cela est particulièrement utile pour autoriser vos utilisateurs à administrer leur propre contenu (voir Chapitre 8). Dans ce cas. Cela s'accomplit à l'aide de la directive SetEnvIf pour définir de manière conditionnelle une variable d'environnement. ils ne peuvent donc pas être totalement fiables. identifiée par un préfixe env=. l'accès sera refusé pour les navigateurs disposant d'un en-tête User-Agent commençant par EvilSearchingEngine. même si cette technique fonctionne le plus souvent. La section <LimitExcept> fait le contraire : elle refuse l'accès à toute autre méthode. les en-têtes étant envoyés par le client. avec Allow et Deny. N'oubliez pas que. . grâce aux variables d'environnement. si l'en-tête User-Agent de la requête (premier argument) correspond à une expression régulière donnée (second argument). Restriction d'accès basée sur le type du navigateur SetEnvIf User-Agent ^EvilSearchEngine broken_crawler <Directory /usr/local/apache2/htdocs> Order Deny. et tous les autres seront autorisés.

Cela implique. b mod_ssl. par exemple. permet d'authentifier les utilisateurs par rapport à un répertoire LDAP.120 CHAPITRE 6 Sécurité et contrôle d'accès Utilisation des sections d'emplacement et de répertoire La directive Order contrôle l'ordre de traitement des directives d'accès. uniquement au sein de chaque phase du traitement de la configuration du serveur. Ce module permet d'utiliser une authentification du client basée sur un certificat (voir Chapitre 7). Fournit un accès utilisateur "anonyme" de style FTP aux zones de téléchargement de fichiers. . disponible dans Apache 2 et versions ultérieures. Les restrictions peuvent ainsi être contournées si les directives de contrôle d'accès sont placées dans une section <Location>. Apache est livré avec plusieurs autres modules d'authentification. Prenez en compte que les liens symboliques et les directives Alias peuvent affecter le paramétrage de l'authentification. ainsi que l'authentification digest et de base standard. Autres modules d'authentification Outre les principaux modules proposant un contrôle d'accès basé sur IP. par exemple : b mod_auth_anon.htaccess. Ce module. quel que soit le paramètre de la directive Order. b mod_auth_ldap. qu'une directive Allow (ou Deny) apparaissant dans une section <Location> sera toujours évaluée après une directive Allow (ou Deny) apparaissant dans une section <Directory> ou un fichier . mais le contenu est aussi accessible par le biais de mappages d'URL supplémentaires.

il authentifie l'utilisateur pour le reste de la session. L'authentification peut aussi être gérée au niveau de l'application. PAM et NIS) et des informations utilisateur stockées dans une série de bases de données (MySQL. de reporting et de contrôle d'accès. Oracle et autres). LDAP. Il vous permet d'inspecter les requêtes HTTP et de réaliser toutes sortes d'opérations de surveillance. PostgreSQL. un pare-feu de niveau HTTP.Autres modules d'authentification 121 L'un des avantages d'Apache réside dans le fait que c'est un système modulaire et extensible. un cookie est affecté . Après validation. notamment celles impliquant une injection SQL et une vulnérabilité de type chemin transversal. On demande généralement le nom d'utilisateur et le mot de passe dans un formulaire Web. Vous en saurez plus sur ce module en vous rendant à l'adresse http://www.modsecurity.org et http://freshmeat. Il peut détecter et bloquer des attaques communes au niveau de l'application. Vous en saurez plus sur ces modules en visitant les adresses http://modules.net.org. . mod_security Ce module mérite une mention spéciale. par essence.apache. C'est ainsi que les sites de portail et de commerce électronique gèrent généralement les fonctions de personnalisation. Plusieurs modules tiers ont été développés pour lui permettre de s'interfacer avec des structures d'authentification existantes (comme les domaines Windows. C'est.

d'authentifier la même ressource sur deux serveurs LDAP différents. par exemple). Par exemple.com/o=Sample Require valid-user </Location> Apache 2. les deux fonctions étaient mélangées dans chaque implémentation de module. D'autres modules propose des fonctionnalités d'autorisation pour les utilisateurs en fonction de données stockées dans des bases de données ou en fonction de fichiers LDAP ou SQL. mod_authn_file implémente l'authentification par rapport aux fichiers texte et mod_authn_dbm réalise l'authentification par rapport aux fichiers de base de données. permet de définir des configurations d'authentification complexes pouvant être référencées par leur nom partout ailleurs dans le fichier de configuration. et d'autres basés sur la propriété des fichiers ou les adresses IP d'origine. Ils peuvent être associés à mod_auth_basic et mod_auth _digest qui implémentent à leur tour des authentifications HTTP de base et digest. Avant cela. Un nouveau module. Cela permet. comme indiqué dans l'exemple au début de cette section. Les fournisseurs peuvent être mélangés. par exemple. mod_authn_alias. arrière-guichets LDAP ou SQL.2 <Location /combined> AuthType Basic AuthName "Restricted Access" AuthBasicProvider file ldap AuthUserFile /usr/local/apache2/conf/htusers AuthLDAPURL ldap://exemple. Ces changements font principalement référence au travail qui a été réalisé dans les modules existants pour séparer clairement les méthodes (authentifications de base et digest) et les fournisseurs (fichiers.122 CHAPITRE 6 Sécurité et contrôle d'accès Apache 2. .2 intègre des modifications significatives dans la mise en place de l'authentification et de l'autorisation.

html Liste de contrôle de sécurité On dit souvent que la sécurité est un processus. procédez de même pour le système d'exploitation et les applications. composants. vous devez vous informer sur les nouvelles versions d'Apache.org/security_report. vous devez suivre les "conseils de sécurité sur Apache" et surveiller les journaux d'accès et d'erreurs.0/misc/ security_tips. etc.apacheweek.hml b Problèmes de sécurité Apache : http://httpd. mais également des correctifs ou des "contournements" qui existent pour y remédier. Etant donné qu'Apache s'exécute en symbiose avec son environnement. vous trouverez ici une liste détaillée de mesures à entreprendre pour sécuriser une installation Apache par défaut. bibliothèques PHP. et non une fonction. Cela dit. . En fait. Pour que votre installation reste sécurisée.Mise à jour de la sécurité Apache 123 Mise à jour de la sécurité Apache Comme avec tous les autres logiciels de serveur. Ces URL vous aideront dans cette tâche : b Liste de diffusion des annonces Apache : http://httpd.org/lists.apache.apache. la plupart des problèmes exploitables à distance avec Apache naissent au niveau de l'application : wiki vulnérable.html b La semaine Apache : http://www.apache.com b Conseils sur la sécurité Apache : http://httpd. en vous tenant au fait des problèmes de sécurité.org/docs-2.

s'il est mal configuré. mod_python. utilisé pour apporter une assistance SSL et TLS. qui autorise un mappage arbitraire et la réécriture des URL entrantes. b mod_ssl. peut permettre aux personnes extérieures d'utiliser votre serveur pour relayer des requêtes. qui. Vous devrez peut-être procéder de même pour d'autres directives présentes dans le fichier de configuration et faisant référence au module désactivé. qui permet aux utilisateurs des systèmes UNIX d'héberger leurs propres pages.124 CHAPITRE 6 Sécurité et contrôle d'accès Désactiver les modules inutiles La première étape consiste à désactiver tous les modules que vous n'utilisez pas. qui fournit la prise en charge de l'appel des programmes externes. Voici une courte liste des premiers modules à retirer si vous ne les utilisez pas. ne désactivez PHP que si vous n'utilisez pas Apache pour exécuter des applications à base de PHP. b mod_deflate. qui fournit la prise en charge SSI. Si vous avez compilé Apache avec une prise en charge de modules chargeables. à peu près dans leur ordre d'importance : b PHP. mod_mono. b mod_userdir. un filtre Apache 2 pour compresser la sortie à la volée. employé pour exécuter des programmes externes sous des identifiants utilisateur différents de celui sous lequel s'exécute Apache. b mod_cgi. b mod_suexec. b mod_include. b mod_rewrite. et sécuriser les communications entre le navigateur et Apache. vous pouvez transformer en commentaires les directives qui chargent des modules spécifiques. Bien sûr. mod_perl et tous les autres modules de langage côté serveur. b mod_proxy. .

Ils peuvent donc être vulnérables à plusieurs attaques. N'oubliez pas de supprimer tous les exemples de scripts et les comptes de démonstration livrés avec vos serveurs d'application. limitez la capacité à exécuter des scripts à des répertoires spécifiques. ou de modifier la base de données. en utilisant la directive ClearModuleList. ainsi que votre environnement de développement et autres logiciels basés sur le Web que vous pourriez avoir installés. . à l'aide de la directive AddModule. Ces inconvénients permettent souvent à un délinquant d'exécuter des commandes système arbitraires. Même s'ils sont utiles. Suppression des échantillons de script La plupart des logiciels et des environnements de développement côté serveur Web proposent des exemples d'applications et de scripts à des fins de démonstration ou de test.3. désactivez mod_cgi. la plupart liées au fait que le programme n'efface pas correctement la saisie de l'utilisateur. affichant le contenu des autres fichiers. puis en activant explicitement des modules. vous pouvez désactiver explicitement des modules compilés spécifiques. dans Apache 1. ces exemples ne sont généralement pas codés en tenant compte de la sécurité. Dans le cas contraire. Restreindre ou désactiver l'exécution de CGI et de SSI Si la prise en charge des scripts CGI ne vous concerne pas.Suppression des échantillons de script 125 De plus.

par exemple la liaison au port approprié. à moins qu'elle ne soit désactivée par Options -IncludesNoExec. Il effectue un certain nombre d'opérations. qui permet l'exécution de commandes externes. Apache est généralement démarré à partir de la racine. il faut s'assurer que les fichiers journal et de configuration. Assurez-vous que les répertoires marqués comme contenant des scripts exécutables ou qui peuvent contenir des scripts PHP ne sont ni inscriptibles par tous. . ne sont pas inscriptibles par d'autres. puis change d'identifiant utilisateur pour celui spécifié dans la directive User. Puisque certaines opérations sont réalisées à partir de la racine. Vous pouvez également envisager d'utiliser l'enveloppe CGI suExec comprise avec Apache. Vérifier les autorisations de fichiers Sous UNIX. vous pouvez analyser votre configuration à la recherche des directives ScriptAlias et Options avec les arguments ExecCGI et vous assurer qu'elles sont correctement configurées. ainsi que les répertoires qui les contiennent. Le même raisonnement peut s'appliquer à la fonctionnalité SSI. prévue par mod_include. ni accessibles par FTP ou WebDAV. par exemple.126 CHAPITRE 6 Sécurité et contrôle d'accès Par exemple. Vérifiez que des tiers ne peuvent pas écrire dans les répertoires marqués comme contenant des scripts exécutables.

faute de quoi un proxy ouvert pourrait servir à lancer des attaques ciblées sur d'autres sites. à moins que l'accès ne soit explicitement activé. voire à relayer du spam.Allow Allow from all </Directory> Consultez les sections précédentes pour savoir comment désactiver les listings de répertoires.Allow Deny from all </Directory> <Directory /usr/local/apache2/htdocs> Order Deny. avec ProxyRequests off. vous devez désactiver ou restreindre la prise en charge des proxy dans votre installation Apache. Si vous exécutez Apache sous forme de proxy inverse. Restreindre l'accès à votre serveur par défaut Le serveur doit être configuré de manière à refuser l'accès par défaut aux documents qu'il contient. ou classique. tiré de la documentation Apache. . montre comment procéder : <Directory /> Order Deny.Limiter ou désactiver la fonctionnalité de proxy 127 Limiter ou désactiver la fonctionnalité de proxy Comme avec les CGI. L'extrait de configuration suivant. vous pouvez désactiver le proxy "ordinaire".

.

vous apprendrez à créer.7 SSL et TLS Ce chapitre propose une brève introduction aux concepts qui sous-tendent SSL. Un tiers capable d'intercepter cette conversation à un point du réseau pourra accéder aux données transmises. Définition de SSL La famille de protocoles SSL/TLS (Secure Sockets Layer/ Transport Layer Security) sert à sécuriser les communications entre deux points d'extrémité. généralement un serveur et un client. voire les modifier. Il se présente comme un guide détaillé pour l'installation et la configuration du module Apache mod_ssl. Vous verrez comment résoudre les problèmes communs liés à SSL. notamment celles destinées aux paiements électroniques sur le Web. D'autre part. ainsi que l'accès à des informations d'entreprise sensibles nécessitent un niveau de sécurité qui n'est pas disponible avec le protocole HTTP. les données sont transmises de manière ouverte. à signer et à installer vos clés et certificats de serveur. Lorsqu'un navigateur accède à un serveur Web à l'aide du protocole HTTP. Plusieurs applications. .

com.exemple. Il améliore la sécurité du protocole HTTP en apportant : b La confidentialité. La validité du certificat est alors testée. Il crypte les données de sorte qu'elles ne soient pas lisibles par des tiers. que nous appellerons "SSL" dans la suite de ce chapitre. généralement sous la forme d'un cadenas placé près de la barre d'adresses. la plupart des navigateurs proposent des indices visuels. ou HTTP sécurisé. Lorsqu'une connexion est établie. Si aucun port n'est spécifié. lorsque vous êtes connecté à un site utilisant le protocole HTTPS. Un certificat est une donnée électronique qui décrit l'identité d'un point d'extrémité dans la communication SSL (voir plus loin). b L'intégrité. les URL HTTPS sont préfixées par https://. Vous le savez probablement déjà.130 CHAPITRE 7 SSL et TLS Le protocole HTTPS. le client demande le certificat du serveur. . Le port par défaut du protocole HTTPS est 443 . c'est le port HTTPS par défaut (443) qui est utilisé. b L'authentification. HTTPS encapsule HTTP sur les protocoles SSL/TLS (Secure Sockets Layer/Transport Layer Security). Il s'assure que les données n'ont pas été modifiées pendant leur transit. le navigateur reconnaît le préfixe https:// et emploie donc le protocole HTTPS pour se connecter au serveur. Fonctionnement de SSL Lorsqu'un utilisateur tape https://www. Il vérifie l'identité du serveur (ou du client). a été développé pour répondre à ces préoccupations.

lorsque vous cryptez des informations avec la clé publique du serveur. Plus loin dans ce chapitre. Dans ce but. la connexion se poursuit. l'étape suivante consiste à convenir d'une clé de cryptage commune. l'utilisateur en est informé et il doit fournir une confirmation. du client) établie. ainsi que des utilitaires de ligne de commande pour créer et manipuler des certificats de serveur. Une fois l'identité du serveur (et. .Compilation d'OpenSSL 131 Si le processus de validation réussit. En effet. si nécessaire./config --prefix=/usr/local/ssl -openssldir=/usr/local/ssl/openssl # make # make install mod_ssl est le module Apache qui implémente HTTPS. Le processus d'accord est sécurisé contre les espions. Le projet OpenSSL propose les bibliothèques cryptographiques de base employées par mod_ssl.tar. les clés publiques de chaque partie sont utilisées dans un algorithme pour s'accorder en toute sécurité sur une clé symétrique.gz | tar xvf # cd openssl* # . la plupart des navigateurs proposent à l'utilisateur des indices visuels (généralement un cadenas fermé) montrant que la connexion est sécurisée. S'il échoue. vous en apprendrez davantage sur les clés de cryptage et la manière de les générer. le serveur suivra alors un processus de validation semblable. Enfin. Ici. le client peut aussi apporter un certificat . Compilation d'OpenSSL # gunzip < openssl*. En option. le client et le serveur peuvent procéder à l'échange ordinaire d'informations. seul le serveur peut les décrypter.

Clés de cryptage Le cryptage est un processus qui consiste à convertir un message existant. un message crypté avec l'une des clés ne peut être décrypté qu'avec l'autre. le processus est appelé cryptographie symétrique. . L'outil de ligne de commande openssl figure dans la distribution OpenSSL. La clé publique peut être mise librement à disposition. le processus de cryptage et de décryptage nécessite d'autres informations. La plupart des systèmes modernes de type UNIX incluent OpenSSL par défaut. Généralement. Dans la suite de ce chapitre. dans la section des binaires du site Web OpenSSL. Il sera placé dans /usr/local/ssl/bin/.132 CHAPITRE 7 SSL et TLS Vous pouvez télécharger une version du binaire Windows. Si l'expéditeur et le destinataire possèdent des clés différentes et complémentaires. en un nouveau message totalement inintelligible pour un espion.openssl. à l'adresse http://www. Si l'expéditeur et le destinataire partagent la même clé. Si ce n'est pas le cas ou que vous ayez besoin d'une version plus récente que celle disponible sur votre système. on parle alors de cryptographie asymétrique ou cryptographie de clé publique. téléchargez le source OpenSSL et installez-le comme indiqué au début de cette section. nous supposerons que vous avez installé OpenSSL dans le répertoire /usr/local/ssl. à savoir une clé. en texte brut. tandis que le propriétaire conserve la clé secrète privée. mais vous pouvez également utiliser les outils de gestion de packages système. dont l'une est publique et l'autre privée. La cryptographie de clé publique implique une paire de clés.org. Ces deux clés sont complémentaires . Le décryptage correspond au processus inverse : il transforme le message crypté en texte brut original.

Création d'une paire de clés 133 Création d'une paire de clés # . 1024 signale le nombre de bits de la clé générée.).. genrsa indique à OpenSSL que vous souhaitez générer une paire de clés à l'aide de l'algorithme RSA...key 1024 .. etc.. Remplacez ensuite fichier1.. etc../usr/local/ssl/bin/openssl genrsa -rand fichier1:fichier2:fichier3 \ -out www.++++++ ....... relativement aléatoires (image de kernel. car les données aléatoires sont automatiquement générées par d'autres moyens. Ce commutateur n'est pas nécessaire sous Windows....++++++ e is 65537 (0x10001) L'exemple montre comment créer une paire de clés en utilisant l'outil de ligne de commande openssl. 1024 bit long modulus . Création d'une paire de clés protégées par mot de passe # .....key 1024 625152 semi-random bytes loaded Generating RSA private key.. Le commutateur out indique où conserver les résultats..exemple..com. par le chemin menant à plusieurs grands fichiers. Le commutateur rand sert à fournir à OpenSSL des données aléatoires pour s'assurer que les clés générées sont uniques et impossibles à deviner. fichiers journaux compressés.com... fichier2.exemple.../usr/local/ssl/bin/openssl genrsa –des3 -rand fichier1:fichier2:fichier3 \ -out www..

134

CHAPITRE 7 SSL et TLS

Ici, l'option des3 indique que la clé privée doit être cryptée et protégée par un mot de passe qui vous sera demandé dès que vous souhaiterez lancer le serveur, comme indiqué à la section "SSLPassPhraseDialog".

Suppression du mot de passe d'une clé
# ./usr/local/ssl/bin/openssl rsa -in www.exemple.com.key \ -out www.exemple.com.key.unsecure

Vous pouvez choisir d'ôter la protection de la clé en émettant cette commande. Cela présentant certains risques pour la sécurité, veuillez consulter la section "SSLPassPhraseDialog".

Certificats
La cryptographie par clé publique peut servir à signer des messages numériquement. Si, par exemple, vous cryptez un message avec une clé secrète, le destinataire peut être assuré qu'il provient de vous en le décryptant simplement avec la clé publique. Il manque toutefois une étape. Comment, en effet, pouvez-vous authentifier des correspondants que vous n'avez jamais rencontrés en personne ? Autrement dit, comment pouvez-vous vérifier à qui appartient réellement une clé publique ? La solution consiste à impliquer un tiers de confiance, c'est-à-dire une autorité de certification (Certification Authority, CA). La CA peut être interne à une société ou à une université, ou encore être un organisme commercial

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

135

proposant des services de certification aux entreprises qui réalisent des transactions sur Internet. Une CA délivre des certificats, à savoir des documents électroniques qui lient une clé publique particulière à des informations concernant son propriétaire, par exemple un nom et une adresse. Les certificats sont signés numériquement avec la clé privée 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 délivré le certificat. Vous devez aussi pouvoir obtenir la clé publique pour cette autorité particulière, fournie par son certificat racine. La plupart des grands navigateurs, comme Internet Explorer, Firefox et Safari, contiennent plusieurs certificats racine, provenant des autorités de certification les plus courantes. Cela permet aux navigateurs de reconnaître et de valider un grand nombre de sites Web sans que l'utilisateur n'ait à intervenir.

Création d'une requête de signature de certificat
# ./usr/local/ssl/bin/openssl req -new -key www.exemple.com.key -out www.exemple.com.csr

Pour obtenir un certificat délivré par une autorité, vous devez d'abord soumettre ce que l'on appelle une requête de signature de certificat. Comme expliqué précédemment, la requête contient des données sur l'organisme qui demande le certificat et la clé publique. Cette commande crée une requête de ce type. Sachez qu'il faudra fournir plusieurs informations, comme indiqué au Listing 7.1.

136

CHAPITRE 7 SSL et TLS

Listing 7.1 Utilisation d'openssl pour générer une requête de certificat

Using configuration from /usr/local/ssl/openssl/openssl.cnf Enter PEM pass phrase: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called 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'entrée de champ "Common Name" correspond à l'adresse que taperont les visiteurs de votre site Web dans leur navigateur. C'est l'une des vérifications réalisées par le navigateur pour le certificat de serveur distant. Si le nom diffère, un avertissement est affiché pour l'utilisateur, précisant l'absence de concordance.

Affichage du contenu d'une requête de signature de certificat

137

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

Affichage du contenu d'une requête de signature de certificat
# ./usr/local/ssl/bin/openssl req -noout \ -text -in www.exemple.com.csr

Les requêtes de signature de certificat sont conservées dans un formulaire spécial et compact. Cette commande affiche le contenu du certificat conservé à l'adresse www.exemple.com.csr dans un format lisible. Comme indiqué précédemment dans ce chapitre, le certificat contient des informations sur l'entité qui le demande, le contenu de la clé publique et une signature créée avec la clé privée.

Création d'un certificat autosigné
Outre soumettre votre demande de signature de certificat à une CA commerciale, vous pouvez toujours créer un certificat autosigné, c'est-à-dire être à la fois l'émetteur et l'objet du certificat. Même si cela n'est pas très utile pour un site Web commercial, l'opération permet de tester

tar.3.gz | tar xvf $ gunzip < apache_1.138 CHAPITRE 7 SSL et TLS votre installation de mod_ssl ou de disposer d'un serveur Web sécurisé.8. Protégez votre fichier de clés en émettant la commande suivante : # chmod 400 www.x.33.exemple.3 $ gunzip < mod_ssl-2.cert (celui renvoyé par l'autorité ou celui autosigné) à /usr/local/ssl/openssl/certs et votre clé à /usr/local/ ssl/openssl/private/.8. le code source d'Apache 1. tout en attendant le certificat officiel de l'autorité de certification. .exemple.3. De plus./configure --with-apache=.3 et 2.3 doit être corrigé pour prendre en charge mod_ssl.com.3.cert Vous devez ensuite copier votre certificat www.3 est distribuée séparément du serveur.33 $ cd ./apache_1.com. la version Apache 1.gz | tar xvf $ cd mod_ssl-2.exemple./apache_1../configure --enable-module= ssl --prefix=/usr/local/apache $ make # make install mod_ssl est un module très populaire qui assure la prise en charge SSL à la fois pour Apache 1.3.key Compilation de la prise en charge SSL dans Apache 1.23-1. Pour des raisons historiques liées aux restrictions d'exportation sur la cryptographie.exemple.23-1.com. # ..com .exemple.tar./usr/local/ssl/bin/openssl x509 -req \ -days 30 -in www.csr -signkey \ www.3.key -out www.33.com.x $ SSL_BASE=/usr/local/ssl/ .33 $ .

3. pour mettre à niveau une installation mod_ssl existante. Il est utile. lancez un make certificate avant make install. par exemple. L'exemple construit Apache 1.3.1. Si Apache contient déjà les correctifs EAPI et la prise en charge de modules chargeables.33 et mod_ssl 2. vous pouvez supprimer SSL_BASE=/usr/local/ssl/ de l'étape de configuration d'Apache.8.23 et suppose que les deux répertoires source sont situés au même niveau. Attention Si vous tentez de lancer Apache maintenant. . Pour cela. qui est ensuite recompilé pour inclure la prise en charge mod_ssl. vous obtiendrez un message d'erreur indiquant qu'il est impossible de lire le certificat du serveur. vous pouvez enfin utiliser le mécanisme de construction APXS commun (voir Chapitre 1).3 139 Cela est réalisé dans le cadre du processus de construction mod_ssl. En option.Compilation de la prise en charge SSL dans Apache 1. Consultez les sections précédentes pour savoir comment créer votre certificat et vos clés de serveur et la section "Configuration minimale d'Apache". Si vous élaborez votre installation par rapport à une bibliothèque OpenSSL système. mod_ssl peut créer un certificat de serveur à des fins de test lors du processus de construction. présenté au Listing 7. L'option de ligne de commande --with-apache pointe vers l'emplacement du répertoire du source Apache 1. pour savoir comment démarrer votre serveur. plus loin dans ce chapitre.

il propose mod_ssl en complément des autres modules.com. Dans le cadre du processus d'installation. quant à Apache 2. Si vous montez également OpenSSL à partir de la source.com. comme indiqué ici : Listen 80 Listen 443 <VirtualHost _default_:443> ServerName www. il comprend un fichier ssl.0.exemple.key </VirtualHost> . Configuration minimale d'Apache Une fois les clés et certificats générés. mod_ssl crée une configuration SSL d'exemple. ce qui peut être déroutant. Si vous montez Apache à partir du source. avec l'option de configuration --enable-ssl.cert SSLCertificateKeyFile \ /usr/local/ssl/openssl/certs/www.140 CHAPITRE 7 SSL et TLS Compilation de la prise en charge SSL dans Apache 2.x Apache 2 étant sorti après les réglementations d'exportation américaines sur la cryptographie.exemple.3 l'ajoute au fichier httpd. qu'ils soient autosignés ou certifiés par un tiers. seules quelques-unes vous seront nécessaires pour la configuration. En réalité. référencé par une directive Include dans httpd. vous allez configurer Apache.conf par défaut . vous devrez ajouter --with-ssl=/usr/local/ssl/openssl.conf.exemple. Il existe un grand nombre d'options de configuration. vous pouvez activer mod_ssl au moment de la construction.conf séparé.com SSLEngine on SSLCertificateFile \ /usr/local/ssl/openssl/certs/www. Apache 1.

il est possible qu'il ait été configuré pour écouter par défaut sur le port 8443.Démarrage d'Apache avec prise en charge SSL 141 L'une des directives Listen indique à Apache d'écouter sur le port HTTPS par défaut. les directives SSL ne sont plus considérées différemment des autres. En effet. Si vous avez installé Apache en tant qu'utilisateur ordinaire. les directives SSL seront probablement entourées d'un bloc <IfDefine SSL>. Si vous avez protégé votre clé privée par un mot de passe. Attention Cela ne doit être réalisé que dans Apache 1.2 n'intégrant plus l'option startssl. Apache 2. Vous pouvez. 443. soit démarrer Apache avec : apachectl startssl Cela transfère la balise -DSSL au binaire du serveur et active la configuration SSL. soit retirer ces blocs. indiquez-le maintenant.0. SSLEngine On active SSL pour cet hôte particulier. vous pouvez lancer à Apache avec : apachectl start Si vous utilisez des fichiers de configuration SSL par défaut (ou ceux fournis par votre vendeur). Les directives SSLCertificateFile et SSLCertificateKeyFile pointent vers le certificat et la clé privée.3 et 2. Démarrage d'Apache avec prise en charge SSL Une fois mod_ssl installé et configuré. .

142

CHAPITRE 7 SSL et TLS

Comme expliqué au Chapitre 2, le port 443 est un port à privilèges et il n'est accessible que par le superutilisateur. Vous pouvez tester l'installation en accédant 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 protégé votre clé privée du serveur par mot de passe, vous devrez le saisir au moment du démarrage. Vous pouvez contrôler ce comportement avec SSLPassPhraseDialog. Sa valeur par défaut, builtin, signifie qu'Apache demandera le mot de passe directement, à chaque démarrage du serveur. Vous pouvez aussi choisir de ne pas protéger la clé (notamment pour des raisons de commodité ; vous n'aurez ainsi pas besoin de saisir manuellement le mot de passe à chaque redémarrage). Attention, cependant ! Dans ce cas, si le serveur rencontre un problème, il en ira de même pour la clé. Vous pouvez également configurer SSLPassPhraseDialog pour appeler un programme externe, qui fournira le mot de passe sur son entrée standard lorsqu'il sera appelé par Apache. Avec un script correctement rédigé, vous obtenez davantage de sécurité que si vous laissiez la clé sans protection (mais pas beaucoup plus).

Amélioration des performances SSL

143

Amélioration des performances SSL
Les algorithmes impliqués dans SSL sont gourmands en unité centrale et peuvent considérablement ralentir le serveur, en particulier en cas de connexions client simultanées. La phase d'échange d'informations peut également retarder la requête. Plusieurs options peuvent cependant améliorer la capacité de réponse d'un site. Vérifiez de bien avoir activé la mise en cache de la session. Cela accélère les situations où il existe plusieurs connexions à partir du même client. En cas de grappe de serveurs SSL, utilisez distcache, de sorte que les données de connexion puissent être mises en cache même si le client se connecte à plusieurs serveurs dans la grappe. Apache 2.2 assure la prise en charge du distcache dès l'installation. Vous en saurez plus sur ce projet en vous rendant à l'adresse http://www.distcache.org. Vous pouvez aussi envisager de disposer d'une machine dédiée, réservée au traitement SSL. Selon vos besoins, il peut s'agir d'un équilibreur de charge commercial (élément matériel) ou d'une machine dédiée exécutant un proxy inverse (un serveur Web qui se fie à des requêtes vers d'autres serveurs Web au nom du client). Cela permet d'apporter des améliorations dans la configuration d'Apache et du système d'exploitation qui ne seraient pas possibles si la machine servait également à d'autres objectifs, comme l'exécution de PHP, de Tomcat et de MySQL. Un proxy inverse peut offrir des avantages supplémentaires, comme l'équilibrage des charges et la connexion unique, avec possibilité d'utiliser des certificats client, sur plusieurs sites Web d'arrière-guichet. Consultez le Chapitre 10 pour en savoir plus.

144

CHAPITRE 7 SSL et TLS

Enfin, vous pouvez installer une carte de cryptographie, un matériel conçu pour décharger le serveur de la majeure partie du traitement SSL. Apache 2.2 prend en charge cette fonctionnalité ; consultez pour cela la directive SSLCryptoDevice.

Forcer le contenu à être desservi par SSL
<VirtualHost 192.168.200.4:80> ServerName private.exemple.com Redirect / https://private.exemple.com/ </Virtualhost>

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

SSL et hôtes virtuels SSL basés sur le nom
Une question revient souvent chez les utilisateurs de mod_ssl : "Est-il possible de disposer de plusieurs hôtes virtuels basés sur le nom et activés par SSL ?" La réponse est non. Le problème est que l'hébergement virtuel basé sur le nom repose sur des informations fournies par le client dans l'en-tête Host: de la requête HTTP, puisque tous les hôtes virtuels basés sur le nom partagent la même adresse IP.

Utilisation des modules Auth d'Apache avec SSL

145

Toutefois, la connexion SSL a lieu au niveau TCP, avant que la requête HTTP ne puisse être envoyée. Le serveur n'est donc pas capable de déterminer, au moment de la connexion, l'hôte virtuel auquel le client veut se connecter et donc le certificat et la clé à utiliser. A noter qu'il existe une spécification (RFC 2817) qui autorise la mise à niveau d'une connexion HTTP existante vers HTTPS. Cela permet de contourner le problème mais, à l'heure où nous écrivons ces lignes, elle n'est implémentée par aucun grand navigateur. Le module mod_ssl d'Apache 2.2 implémente la prise en charge de RFC 2817, tout comme mod_nw_ssl, le module SSL Apache de Netware.

Utilisation des modules Auth d'Apache avec SSL
SSLOptions +FakeBasicAuth

Lorsque cette option est activée, le nom distinctif (ou Subject Distinguished Name) du certificat client est traduit en un nom d'utilisateur avec autorisation de base HTTP. Cela signifie que les méthodes d'authentification Apache standard (voir Chapitre 6) peuvent être utilisées pour le contrôle d'accès. Ces modules d'authentification "croient" que l'utilisateur a fourni un nom et un mot de passe valables. Vous devrez modifier certains paramètres dans vos bases de données utilisateur.

par exemple. b Le domaine du certificat ne correspond pas au domaine du serveur. les certificats client protègent l'accès aux sites ou aux services Web de la société. Cela peut survenir.pl.146 CHAPITRE 7 SSL et TLS Messages d'avertissement lors de l'accès à un site Web activé par SSL Parfois. après quoi ils expirent. Ils sont souvent davantage sécurisés que les noms d'utilisateur et les mots de passe. b Le certificat a été signé par une autorité de certification inconnue ou en laquelle le navigateur n'a pas confiance. lors de la phase d'échange de données. intégré avec openssl. . les utilisateurs voient s'afficher une fenêtre contextuelle d'avertissement indiquant que quelque chose ne va pas avec le site Web. utilisez l'argument ca de l'outil de ligne de commande ou bien le script d'enveloppe CA. que le client présente un certificat valide et que ce dernier a été signé par une autorité de confiance. Cela survient si le certificat a été délivré pour un site Web différent. Les certificats commerciaux sont généralement valables pendant une période donnée. lors de l'accès à un site Web activé par SSL. la première étape consiste à créer une CA racine. Voici quelques-unes des causes les plus fréquentes : b Le certificat a expiré. si vous utilisez un certificat autosigné à des fins de test. le serveur vérifie. Création de certificats client Lorsque vous utilisez l'autorisation de certificat client. Pour devenir votre propre autorité de certification. Même si cela est lourd à gérer et à distribuer. car ils ne peuvent être ni devinés ni interceptés. Pour cela.

Les utilisateurs d'Internet Explorer n'ont qu'à cliquer sur le fichier de certificat et à suivre les instructions.pl -pkcs12 La méthode exacte pour importer le certificat vers la machine de l'utilisateur final varie selon le type du navigateur. Cette directive SSLVerifyClient exige des clients qu'ils fournissent un certificat valide pour .. un certificat de serveur. Authentification à l'aide des certificats client SSLVerifyClient require SSLCACertificateFile \ /usr/local/ssl/openssl/certs/ca. Pour le convertir dans un format autre qui le rende plus commode à importer dans les navigateurs.crt Une fois que vous avez installé des certificats dans vos clients.pl -newca Le script génère alors une clé privée. vous pouvez émettre la commande suivante : CA. etc. Vous pouvez maintenant créer une demande de signature de certificat (CSR) et signer votre certificat avec : CA.Authentification à l'aide des certificats client 147 Pour créer une nouvelle autorité de certification. ainsi qu'une structure de répertoires qui contient les fichiers générés. exécutez la commande suivante : CA.pl -newreq CA. vous devez demander à Apache d'activer la validation SSL pour les clients.pl -signreq Le fichier de CA généré aura le format PEM.

vous pouvez choisir un utilitaire indépendant. Pour Apache 1. Plusieurs sociétés commerciales. comme IBM. disposent de leurs propres modules SSL. Alternatives à mod_ssl Il existe plusieurs alternatives à mod_ssl. comme stunnel (http://www. Test de sites Web activés par SSL à partir de la ligne de commande # openssl s_client -connect www.apache-ssl. le module qui se trouve être à l'origine de mod_ssl. il peut être pratique pour certains scénarios lorsqu'il n'est pas possible ni souhaitable de modifier une configuration de serveur en fonctionnement.org.com:443 Vous pouvez utiliser openssl ou d'autres outils basés sur SSL. Vous obtiendrez des . comme stunnel (http://www. et utilisant généralement des boîtes à outils autres que OpenSSL. Enfin. inclus dans leurs packages de serveur Web basés sur Apache. vous pouvez utiliser Apache-SSL.148 CHAPITRE 7 SSL et TLS pouvoir se connecter. SSLCACertificateFile fournit le chemin vers le fichier contenant le certificat CA de confiance qui servira à vérifier la validité du certificat client. Il est notamment possible d'employer cette commande pour vous connecter au site Web d'IBM à l'aide de HTTPS.org).3. pour tester des serveurs Web sécurisés.org). pour placer en proxy les connexions SSL à un serveur Apache existant. Vous le trouverez à l'adresse http://www.stunnel.stunnel.ibm. Même s'il n'est pas aussi flexible que mod_ssl.

0 \ force-response-1.*" nokeepalive \ ssl-unclean-shutdown downgrade-1. comme si vous aviez utilisé Telnet pour vous connecter à un serveur Web ordinaire sur le port 80 pour émettre des requêtes HTTP manuellement (voir Chapitre 1). Contourner les implémentations SSL présentant des bogues SetEnvIf User-Agent ". Vous pouvez également émettre une commande GET / HTTP/1. Ainsi. qui figure dans le fichier de configuration par défaut.0 et appuyer sur Entrée pour obtenir une réponse.*MSIE. Certaines variables d'environnement peuvent être réglées pour forcer des comportements spécifiques.0 Certains navigateurs (ou serveurs. Si le navigateur client contient la chaîne MSIE. l'extrait présenté ici. . la prise en charge de maintien en activité (keep-alive) sera mise en service.Contourner les implémentations SSL présentant des bogues 149 détails sur le protocole SSL et le certificat de serveur pour la connexion. Cela est particulièrement utile si vous disposez d'un site commercial et que vous deviez prendre en charge des navigateurs plus anciens. contourne les bogues de l'implémentation SSL des navigateurs Internet Explorer. s'ils opèrent dans une configuration de proxy inverse) présentent des problèmes connus avec des versions spécifiques du protocole SSL ou de certaines fonctions. pour porter son choix sur une précédente version du protocole HTTP.

Vous apprendrez à résoudre ce problème au Chapitre 10." \ and %{SSL_CLIENT_S_DN_OU} in {"Staff". sachez que les informations relatives au certificat et aux connexions liées à SSL pour les clients ne sont pas disponibles pour les serveurs d'arrière-guichet. Ltd. SSLRequire peut être complexe à configurer. . mais il offre des possibilités quasi illimitées. "CA". b Le client provient d'un réseau interne. Comme cela arrive avec mod_rewrite. de confiance (comme indiqué par REMOTE_ADDR). Chapitres annexes Si vous utilisez Apache comme proxy inverse.150 CHAPITRE 7 SSL et TLS Contrôle d'accès complexe avec mod_ssl SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP |NULL)-/ \ and %{SSL_CLIENT_S_DN_O} eq "Snake Oil.162\. "Dev"}\ and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \ and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \ or %{REMOTE_ADDR} =~ m/^192\.76\. Veuillez vous reporter à la documentation de SSLRequire pour plus d'informations. L'extrait de configuration qui précède vérifie que : b La connexion SSL n'utilise pas un chiffrage d'exportation (faible) ou un chiffrage NULL. aux heures de travail (de 8 h 00 à 20 h 00).[0-9]+$/ Cet exemple montre comment utiliser la directive SSLRequire pour implémenter les restrictions d'accès arbitraires fondées sur plusieurs paramètres. que le certificat a été émis par une CA particulière et pour un groupe particulier et que l'accès a lieu pendant les jours de travail (du lundi au vendredi).

8 Publication de contenu avec DAV Apache et la publication de contenu Si vous proposez des services d'hébergement à d'autres utilisateurs. il faut leur fournir une méthode efficace pour charger et entretenir leurs sites Web. de sorte que chaque utilisateur dispose de son propre espace sur le Web. Nous donnons ici des explications sur les méthodes qui restreignent l'accès en écriture à des ressources particulières. sur la manière de configurer différents clients (y compris des dossiers Web de Windows). Vous trouverez également des informations sur la façon d'activer des répertoires par utilisateur. ainsi que sur certains des problèmes les plus fréquents. . Ce chapitre traite du module mod_dav et indique comment le mettre en œuvre pour offrir aux utilisateurs un moyen de gérer leur contenu.

Cela entraîne des complexités et des problèmes de sécurité liés à l'autorisation de l'accès direct au serveur. Les solutions étaient diverses : autoriser les utilisateurs à accéder à la coque du système. Les moyens permettant de générer un contenu Web sont passés de simples éditeurs de texte à des outils de publication sophistiqués. les Webmestres et les administrateurs système éditaient le contenu d'un serveur directement à partir de la coque (shell) en utilisant des éditeurs de texte. différents postes sont apparus : les administrateurs entretenaient le serveur et les utilisateurs et les programmeurs fournissaient le contenu. Pour apprécier la fabuleuse avancée procurée par WebDAV. Aux premiers temps du Web. le chargement .152 CHAPITRE 8 Publication de contenu avec DAV Présentation de WebDAV WebDAV signifie Web-based Distributed Authoring and Versioning. L'accès à la coque exige que vos utilisateurs connaissent les bases de la ligne de commande UNIX. Enfin. d'une part que les utilisateurs téléchargent et installent un outil supplémentaire. les scripts personnalisés. Des mécanismes étaient nécessaires aux utilisateurs pour envoyer et modifier leur contenu. d'autre part qu'un serveur FTP soit installé. L'emploi d'un client FTP exige. ou bien employer le protocole FTP ou d'autres protocoles propriétaires. Malheureusement. Or. il n'existait pas de méthode standard permettant aux uns comme aux autres de charger du contenu. cette séparation des tâches nécessitait des règles de restriction d'accès et des méthodes simples à utiliser pour des non-techniciens. plus proches des traitements de texte en termes de fonctionnalités et de simplicité d'utilisation. C'est un protocole qui prolonge HTTP et permet aux utilisateurs de charger et de modifier leur contenu à distance. il est nécessaire de comprendre les limitations des précédentes méthodes de publication. comme vi ou emacs. A mesure que le Web a grandi.

la suppression et le verrouillage de ressources à des fins d'édition. la création. etc. Il peut profiter de plusieurs fonctions intégrées d'Apache. comme le partage des mécanismes de contrôle d'accès et l'interaction avec les moteurs de script.3 et sous forme de module intégré pour Apache 2. WebDAV permet de contourner ces problèmes en proposant un protocole standard qui peut être implémenté dans le cadre du serveur Web. Le protocole DAV lui-même est extensible. mod_dav est implémenté sous forme de module Apache qui prolonge le protocole HTTP.Avantages de l'utilisation de mod_dav 153 des fichiers par l'intermédiaire de formulaires HTML et les protocoles propriétaires (notamment ceux utilisés par Microsoft FrontPage) soulèvent plusieurs problèmes de fonctionnement croisé et de sécurité. qui est distribué sous forme de module tiers pour Apache 1.0. les systèmes de contrôle des versions et les structures de gestion documentaire propriétaires). comme SSL pour le cryptage et l'authentification basée sur le certificat. WebDAV prolonge le protocole HTTP avec de nouvelles méthodes pour permettre. l'authentification de base HTTP. comme mod_perl et PHP. WebDAV est implémenté dans Apache avec mod_dav. Avantages de l'utilisation de mod_dav Nous l'avons vu à la section précédente. Même si les ressources accessibles par DAV résident généralement dans le système de fichiers. les serveurs proxy. L'intégration dans Apache offre de nombreuses autres possibilités. DAV peut agir comme un frontal fondé sur les normes pour toute une série de référentiels d'arrière-guichet (comme les bases de données. entre autres. .

Crée une nouvelle collection. b MOVE. Si les collections parentes n'existent pas. DAV intègre le concept des collections (à savoir des groupes de fichiers). WebDAV a été implémenté par la plupart des structures de publication Web modernes. qui permet généralement d'opérer un transfert vers un répertoire du serveur. une erreur est renvoyée. Nous avons vu précédemment que les ressources DAV pouvaient être associées à des informations de métadonnées. b PROPFIND. Ces informations vous seront nécessaires pour implémenter le contrôle d'accès et écrire sur des ressources activées pour DAV : b COPY. La méthode PROPFIND permet d'interroger ces métadonnées. . Déplace des fichiers et des collections. comme indiqué ici. Des en-têtes supplémentaires permettent de spécifier la copie récursive de collections imbriquées. les suites Office et les environnements de bureau. Copie des fichiers ou des collections (l'équivalent des répertoires du système de fichiers). cela peut prendre une signification totalement différente pour d'autres systèmes d'arrière-guichet. WebDAV et le protocole HTTP DAV est implémenté au-dessus du protocole HTTP standard qui permet aux navigateurs et aux serveurs Web de communiquer. Attention. Il prolonge les méthodes HTTP existantes et en inclut de nouvelles. b MKCOL. cependant.154 CHAPITRE 8 Publication de contenu avec DAV Par exemple. Les collections parentes doivent être explicitement créées à l'aide de la méthode PUT. Enfin.

Elles servent.conf : LoadModule dav_module modules/mod_dav. Cette méthode permet de supprimer. La méthode OPTIONS est prolongée pour rapporter les capacités DAV. principalement pour les avertir des nouvelles fonctions de verrouillage. comme GET et PUT. par exemple. Ces méthodes permettent de verrouiller une ressource. b LOCK et UNLOCK. sachez que mod_dav y figure déjà sous forme de DLL./configure --enable-dav Apache 2.Installation de mod_dav sous Apache 2. Vous pouvez l'activer comme vous le feriez avec n'importe lequel des autres modules intégrés. comme le système de gestion de source et les bases de données Subversion. Il suffit donc d'activer les directives LoadModule dans le fichier de configuration httpd.0 155 b PROPPATCH. à éviter qu'une ressource ne soit modifiée alors que vous l'éditez. de créer et de modifier des métadonnées de ressources. il compile également l'arrière-guichet du système de fichiers (--enable-dav-fs). même s'il n'est pas activé par défaut. Installation de mod_dav sous Apache 2.so . Si vous utilisez la distribution Apache 2 Windows.so LoadModule dav_fs_module modules/mod_dav_fs.0 inclut mod_dav. Par défaut.0 . Le protocole DAV prolonge les méthodes HTTP existantes. Il est également possible de disposer d'autres arrière-guichets pour DAV.

gz cd mod_dav-1. Ces questions seront traitées aux sections suivantes.6.webdav. comme vous le feriez avec n'importe quel autre module tiers (voir l'extrait de configuration).156 CHAPITRE 8 Publication de contenu avec DAV Installation de mod_dav sous Apache 1. L'exemple montre comment activer DAV sur un site Web.3./configure --with-apxs=/usr/local/apache/bin/apxs make make install Apache 1.3 ne dispose pas d'une prise en charge intégrée de DAV. Il vous faut télécharger et installer mod_dav.3 tar xvfz mod_dav-1.org/mod_dav/ et http://www.webdav. Ils concernent la sécurité et le fonctionnement croisé avec des clients tiers contenant des bogues.3. Il existe toutefois d'autres aspects de la configuration DAV qui doivent être traités dans un environnement DAV de production.3-1. Il suffit de faire figurer DAV on à l'emplacement (ou dans la section de répertoire) qui doit être accessible par DAV.org/mod_dav/win32/.0.0.6 .tar. . A noter qu'il est possible de préciser l'emplacement du fichier de verrouillage DAV. grâce à la directive DAVLockDB. Configuration WebDAV de base DAVLockDB /usr/local/apache/var/DAVLock <Location /> Dav On La configuration de DAV est très simple. Vous pouvez télécharger le code source UNIX et les binaires Windows aux adresses http://www. DAV possède son propre mécanisme de verrouillage et ne repose pas sur la fonctionnalité du système de fichiers sous-jacent.3-1.

l'activation de DAV présente un risque grave pour la sécurité. cette procédure peut être accomplie à l'aide de modules de contrôle d'accès Apache standard. L'opération est réalisée à l'aide de mod_auth (voir Chapitre 6) et de la directive <LimitExcept>. qui peut contenir des noms d'utilisateur et des mots de passe sensibles).1 : Protection de l'accès DAV <Location /> Dav On AuthType basic AuthName "DAV Resource" AuthUserFile /usr/local/apache2/conf/htusers <LimitExcept GET HEAD OPTIONS> require user davuser </LimitExcept> </Location> . L'exemple montre comment exiger un mot de passe et un nom d'utilisateur valides pour accéder en écriture à une ressource DAV. DAV étant placé au-dessus du HTTP. Il est donc nécessaire de protéger l'accès aux ressources activées par DAV.Sécurisation de votre configuration WebDAV 157 Sécurisation de votre configuration WebDAV <LimitExcept GET HEAD OPTIONS> require user davuser </LimitExcept> Par défaut. Listing 8. comme MKCOL. Les utilisateurs seront en effet en mesure de lire et de modifier le contenu Web (dont le source des scripts CGI ou PHP.

Il existe d'autres mesures. vous pourrez facilement créer. notamment dans des versions récentes d'Exchange. Même si elles ne sont pas très utiles pour du HTTP ordinaire. Vous pouvez également le configurer pour qu'il exige un contrôle d'accès basé sur SSL ou IP. Il suffit de spécifier l'URL d'un emplacement activé par DAV dans la boîte de dialogue Ouvrir de l'application. L'exemple permet à tout le monde d'accéder au contenu Web en employant des méthodes HTTP pures. . et ce afin d'obtenir une protection supplémentaire.1). Une fois fait. comme l'exécution de DAV sur une instance séparée et à usage unique d'Apache. ou d'utiliser la boîte de dialogue d'ajout d'un nouvel emplacement réseau (voir Figure 8. Accès aux ressources DAV depuis Microsoft Office Les versions récentes de Microsoft Office (comme Office 2000 et Office XP) permettent d'ouvrir et d'éditer des documents à partir des serveurs activés par DAV.158 CHAPITRE 8 Publication de contenu avec DAV <Limit> et <LimitExcept> sont deux directives de sections permettant d'appliquer des paramètres de configuration donnés à certaines méthodes de requête spécifiques. Ce serveur Apache peut s'exécuter sur un port séparé. et être facilement divisé et sécurisé. modifier et partager des documents sur le serveur distant. elles peuvent servir pour des configurations DAV. mais restreint l'accès DAV aux seuls utilisateurs autorisés.

Accès aux ressources DAV depuis Microsoft Windows 159 Figure 8. Les utilisateurs de Windows peuvent alors faire glisser les fichiers vers ces dossiers. double-cliquer pour les modifier. Ceux-ci assurent un accès transparent aux serveurs activés par DAV en les présentant sous forme de dossiers du Bureau Windows. Il est également possible d'accéder à une ressource DAV sous forme de dossier Web sur une machine Windows 2000. . directement depuis Explorer ou en utilisant un assistant. Accès aux ressources DAV depuis Microsoft Windows Les versions récentes des systèmes d'exploitation Microsoft (comme Windows 2000 et Windows XP) assurent la prise en charge de DAV par le biais des dossiers Web. etc.1 Ajout d'un favori réseau sous Microsoft Office.

faire glisser des fichiers et les modifier (voir Figure 8. puis suivez les instructions à l'écran. Ouvrez une fenêtre Internet Explorer. Cliquez sur le menu Fichier et sélectionnez Ouvrir. Figure 8. plus loin. Vous devriez maintenant pouvoir créer des répertoires. nous supposerons qu'un serveur Apache dessert le domaine www.com avec une prise en charge DAV activée sous la section /davdocs du site. Cochez l'option Ouvrir en tant que dossier Web. . Vous pouvez y accéder en cliquant sur l'icône de Bureau portant ce nom.com/ davdocs/.160 CHAPITRE 8 Publication de contenu avec DAV Dans la suite de cette section. Explorer se connecte à la ressource.exemple.2). Vous pouvez également ajouter un dossier Web à l'aide d'un assistant. cliquez sur l'icône Ajouter un favori réseau.exemple. Une fenêtre contextuelle s'affiche (voir Figure 8. L'emplacement est automatiquement ajouté au dossier Favoris réseau.2 Ouverture d'une ressource DAV depuis Explorer. accédez d'abord au dossier Favoris réseau mentionné à la section précédente. la section "Gestion des clients présentant des bogues").3). Pour cela. et cliquez sur OK. Tapez l'URL suivante : http://www. Assurez-vous que la directive RedirectCarefully appropriée soit en place (voir.

mozdev.html depuis Firefox et suivez les instructions. ce qui procure l'accès aux ressources DAV depuis Firefox. Accès aux ressources DAV depuis Firefox A l'heure où nous écrivons ces lignes. cliquez simplement sur le lien http:// open-webfolder. Firefox n'assure aucune prise en charge native pour accéder aux ressources DAV.org/installation. l'extension openwebfolder (sous Windows uniquement) permet de se connecter au composant Microsoft Windows WebDAV.org/. Pour l'installer. Une fois que vous avez redémarré Firefox.Accès aux ressources DAV depuis Firefox 161 Figure 8. Toutefois.3 Vue d'une ressource DAV. cliquez du bouton droit sur . L'outil est disponible à l'adresse http://openwebfolder.mozdev.

Figure 8. Ils peuvent servir de remplacements pour leurs contreparties FTP et scp.4 Ouverture d'un dossier Web depuis Firefox. . cadaver et sitecopy sont deux des clients à la ligne de commande Open Source les plus populaires.com Plusieurs clients à la ligne de commande sont disponibles pour accéder aux ressources activées par DAV. etc. puis sélectionnez "Open as Web Folder" dans le menu contextuel pour y accéder par le biais de WebDAV (voir Figure 8./cadaver dav:!> open http://exemple.162 CHAPITRE 8 Publication de contenu avec DAV n'importe quelle page. get. Accès à DAV depuis la ligne de commande . ce qui simplifie l'interactivité et l'intégration dans des scripts administratifs. comme ls. cadaver est une "coque interactive" qui propose des commandes de style FTP.4). put.

.html': succeeded.html 4816 Aug 14 14:19 company. Downloading `/solutions. Coll: images 0 Dec 7 2004 Coll: styles 0 Dec 12 2004 Home.html' to /tmp/cadaver-editzEzdL9.html 5352 Dec 7 2004 partners.html' Progress: [=============================>] 100. dav:/> cadaver peut être téléchargé à l'adresse http://www.html 3037 Dec 7 2004 dav:/> edit solutions.html 6087 Dec 7 2004 solutions. html Progress: [=============================>] 100. répertorier les ressources disponibles et modifier un fichier distant : ./cadaver dav:!> open http://exemple.0% of 6232 bytes succeeded.Accès à DAV depuis la ligne de commande 163 L'exemple montre comment utiliser cadaver pour accéder à un serveur Web activé par DAV. html'.org/cadaver.. Uploading changes to `/solutions. Unlocking `solutions.html': succeeded.com dav:/> ls Listing collection `/': succeeded. Changes were made. webdav. Running editor: `vi /tmp/cadaver-editzEzdL9. .html Locking `solutions.0% of 6230 bytes succeeded.

Cet exemple (proposé dans le fichier de configuration Apache par défaut) définit la variable d'environnement redirect_carefully pour deux clients WebDAV connus pour rencontrer les problèmes mentionnés. ne suit pas la redirection.164 CHAPITRE 8 Publication de contenu avec DAV sitecopy permet de maintenir la synchronisation entre une arborescence de documents locale et un serveur distant.lyra.org/ sitecopy. dans la confusion. Apache propose un contournement à ce comportement. mais celui-ci. en ignorant la redirection lorsque la variable d'environnement redirect-carefully est paramétrée. et que vous obteniez une mention semblable à : "OPTIONS /davdocs HTTP/1. notamment DAV. c'est que vous avez rencontré un bogue avec certaines implémentations client de WebDAV. Apache envoie une redirection (HTTP code 301) au client. . Il peut être téléchargé à l'adresse http://www. Gestion des clients présentant des bogues BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully BrowserMatch "^gnome-vfs" redirect-carefully Si vous ne parvenez pas à vous connecter à votre serveur DAV à l'aide des dossiers Web de Microsoft ou d'anciennes versions de dossiers virtuels Gnome. à l'aide de plusieurs protocoles.1" 301 dans votre journal d'accès.

Vous pouvez aussi mettre en correspondance le chemin du système de fichiers avec différentes URL et activer ou désactiver les modules de manière sélective. et non le code source. Contenu dynamique et DAV Alias /php /usr/local/apache/php_files Alias /php-source /usr/local/apache/php_files <Location /php-source> DAV On ForceType text/plain </Location> Si vous accédez à des ressources générées dynamiquement (comme des pages PHP ou des script CGI). Pour contourner cela.mod_speling et DAV 165 mod_speling et DAV Si vous utilisez DAV. sur lesquels la prise en charge de PHP n'est pas activée (voir précédemment). L'exemple (extrait de la documentation DAV) montre comment procéder. vous pouvez lancer un serveur Web ou un hôte virtuel indépendant. ce qui évite l'exécution par le moteur PHP. En effet. vous obtenez le contenu du fichier après qu'il a été traité par le serveur Web. mod_speling sert à corriger les erreurs ou les fautes d'orthographe de l'utilisateur (voir Chapitre 4). vous risquez de rencontrer ce problème : Apache renvoie ce contenu généré dynamiquement. On oblige ici tout le contenu desservi par l'URL /php-source à adopter le type text/plain. vous devrez obligatoirement désactiver mod_speling. . Autrement dit. ce module interfère avec plusieurs opérations liées à DAV (comme la création de nouvelles ressources) en les faisant correspondre par erreur à des fichiers existants si les noms sont similaires. et non le code source du fichier.

com/~utilisateur/ index. Si le premier argument est différent de enabled ou disabled. il la met en concordance avec un chemin spécial dans le répertoire d'accueil de l'utilisateur.166 CHAPITRE 8 Publication de contenu avec DAV Activation des pages par utilisateur UserDir enabled UserDir public_html Avez-vous déjà accédé à une URL du type http://www . Elle est fournie par mod_userdir.thml.exemple. Quand Apache trouve une requête de ce type. Vous pouvez également spécifier une liste supplémentaire de noms d'utilisateurs à activer ou à désactiver de manière sélective. Le chemin peut aussi contenir un motif tel que : UserDir /home/*/Web qui correspondra à http://www. Sachez que vous pouvez l'activer ou la désactiver avec les directives de configuration UserDir enabled et UserDir disabled. à l'adresse : /home/utilisateur/Web/index. UserDir public_html fera concorder une requête pour http://www.exemple. Cette fonctionnalité permet à chacun des utilisateurs de publier son propre contenu. suivi de son nom.exemple. comme dans UserDir disabled mysql root.com/~joe ? C'est ce que l'on appelle une "page Web par utilisateur". il sert à spécifier l'endroit où sont stockés les sites par utilisateur.html . Chaque utilisateur du système se voit affecter une URL qui commence par le signe ~.com/~utilisateur avec /home/utilisateur/public_html/. Par exemple.

Par exemple : UserDir http://www.com RewriteRule ^(.com/~utilisateur/ index.html Autres répertoires utilisateur RewriteEngine On RewriteCond %{HTTP_HOST} !^(www\. L'exemple montre comment utiliser mod_rewrite pour faire concorder des requêtes destinées à utilisateur.exemple\.thml avec : http://www.Autres répertoires utilisateur 167 Les répertoires par utilisateur doivent être lisibles pour l'utilisateur sous lequel Apache s'exécute.com au répertoire HTML par utilisateur qui convient.]+)\.exemple/user/index. vous pouvez choisir de rediriger le client vers une certaine URL.com fera concorder http://www.exemple.) RewriteCond %{HTTP_HOST} ^([^.exemple. vous pouvez envisager d'utiliser mod_vhost _alias ou mod_rewrite.*)$ /home/%1/public_html$1 Si vous ne souhaitez pas activer mod_dir ou que vous ayez besoin d'une fonctionnalité légèrement différente de ce qui est proposé.exemple. . Enfin.

comme indiqué : DAVLockDB /usr/local/apache/var/DAVLock Si la directive est spécifiée mais que le répertoire contenant le fichier de verrouillage ne soit pas inscriptible. . One must be specified to use the locking functionality. de sorte que le chemin de la directive DavLockDB possède des autorisations en écriture.#401] Si vous rencontrez un message de ce type. preventing access to the various lock properties for the PROPFIND. #0] Vous devez résoudre les autorisations. cela signifie que vous devez fournir une directive DavLockDB dans le fichier de configuration. destinées à l'utilisateur sous lequel Apache s'exécute. [500.168 CHAPITRE 8 Publication de contenu avec DAV Résolution des problèmes avec DAVLockDB No such file or directory: A lock database was not specified with the DAVLockDB directive. vous obtiendrez un message analogue à celui-ci : The lock database could not be opened. [500.

tandis que d'autres sont spécifiques à Apache. et non du serveur Web Apache lui-même. En effet. . dans la plupart des cas. Heureusement. A noter que certains des problèmes et des solutions traités dans ce chapitre sont suffisamment génériques pour s'appliquer à la plupart des logiciels de serveurs. cela ne sera pas nécessaire.9 Performances et évolutivité Personnalisation d'Apache Ce chapitre décrit les options de configuration qui risquent d'affecter les performances et l'évolutivité d'Apache et indique la manière de les personnaliser. la plupart des problèmes de vitesse et d'évolutivité proviennent généralement du moteur de génération de contenu dynamique ou de la couche de la base de données.

tandis que l'évolutivité consiste à desservir un grand nombre de requêtes simultanément. les entrées-sorties de blocs. vmstat est un outil UNIX servant à dénicher les goulots d'étranglement. Ce chapitre propose plusieurs suggestions et idées pratiques pour vous aider à démarrer. ainsi que de prendre en charge plusieurs enfants Apache s'exécutant simultanément. Cet outil donne des informations sur les procédures. de travail de profilage et de compréhension du fonctionnement interne du serveur. Pour clarifier les choses. Cette RAM supplémentaire permet au système d'exploitation de mettre en cache des fichiers disque d'accès fréquent. . Vous pouvez également modifier différents paramètres de commande. faites appel à l'utilitaire hdparm. Personnalisation du matériel vmstat Il est probable que l'action la plus importante qu'il soit possible de réaliser pour améliorer les performances d'un serveur consiste à augmenter la quantité de RAM. les pièges et l'activité de l'unité centrale. Sous Linux. sachez que les performances permettent de répondre plus rapidement aux requêtes.170 CHAPITRE 9 Performances et évolutivité Les performances et l'évolutivité Améliorer les performances et l'évolutivité de n'importe quel système informatique implique un mélange d'expérience. la mémoire. le paging. Des disques rapides englobant de grandes quantités de cache peuvent améliorer considérablement le problème des charges. notamment en activant la prise en charge de Direct Memory Access pour votre lecteur. Autre aspect à prendre en compte : la vitesse du disque.

Reportez-vous à la documentation de votre système d'exploitation pour plus de détails sur la syntaxe de ulimit. Enfin. . La commande ulimit d'UNIX permet de fixer plusieurs des limites traitées dans les prochaines sections en fonction du processus. l'opération peut consommer une grosse partie des ressources de l'unité centrale. pour en savoir plus sur les paramètres à appliquer. Un processeur plus rapide ou une carte de cryptographie dédiée vous aideront dans ce cas. Ce type de machine est recommandé pour les hébergements de charges moyennes à lourdes. Elargissement des limites du système d'exploitation ulimit Plusieurs facteurs du système d'exploitation peuvent empêcher l'adaptation d'Apache. une machine équipée de plusieurs unités centrales (ou d'unités centrale à cœurs multiples) améliore considérablement l'évolutivité des serveurs Web basés sur les processus. aux limitations de la mémoire et au nombre simultané maximal de fichiers de connexion ouverts. Ces facteurs sont liés à la création de processus.Elargissement des limites du système d'exploitation 171 Si vous utilisez SSL sur votre serveur et que vous deviez prendre en charge plusieurs utilisateurs simultanés. ainsi qu'au Chapitre 10. Reportez-vous au Chapitre 7 et ("Amélioration des performances SSL").

Les paramètres MPM d'Apache sont ensuite contraints par les paramètres du système d'exploitation. Ces modifications n'exigent pas de reconstruire le kernel. elle peut être paramétrée au moment de l'exécution. mais peuvent demander un redémarrage pour prendre effet. Sous Solaris. Ils sont décrits en détail au Chapitre 11. Sous les kernels Linux 2. vous pouvez accéder à la limite est accessible . Les étapes nécessaires pour modifier les limites varient selon les systèmes d'exploitation. analogue pour le système d'exploitation. Ces paramètres affectent l'évolutivité.4 et 2. ces paramètres peuvent être modifiés dans le fichier /etc/system.6. Ces paramètres varient selon les MPM (modules multitraitement). ce qui réduit ensuite le nombre de visiteurs auxquels vous pouvez répondre simultanément. il existe un mappage entre les threads et les processus. Vous pourrez modifier le nombre total .172 CHAPITRE 9 Performances et évolutivité Elargissement des limites du système d'exploitation sur les processus Apache propose des paramètres pour éviter que le nombre de processus et de threads n'excède certaines limites. Vous trouverez le contenu de ce fichier à l'adresse : cat /proc/sys/kernel/threads-max et pourrez écrire dessus en utilisant : echo valeur > /proc/sys/kernel/threads-max Sous Linux (à la différence de la plupart des autres versions d'UNIX). qui restreignent le nombre de processus et de threads. en modifiant le fichier /proc/sys/kernel/threads-max. car ils limitent le nombre de connexions simultanées au serveur Web.

Augmentation des descripteurs de fichiers du système d'exploitation 173 de processus en modifiant l'entrée max_nprocs et le nombre de processus autorisés pour un utilisateur donné. ce qui restreint le nombre de connexions simultanées sur le serveur. Vous trouverez des informations complémentaires à l'adresse : http://httpd.org/docs/misc/descriptors. avec maxuproc. Le système d'exploitation limite le nombre de descripteurs de fichiers qu'un processus donné peut ouvrir. . Sous Solaris.apache. Le moyen à employer pour modifier ces paramètres dépend du système d'exploitation.html. comme indiqué à la section précédente). Augmentation des descripteurs de fichiers du système d'exploitation Dès qu'un processus ouvre un fichier (ou un socket). vous devez modifier la valeur de rlim_fd_max dans le fichier /etc/system. vous pouvez lire ou modifier /proc/sys/fs/file-max (en utilisant echo et cat. une structure (appelée "descripteur de fichiers") est affectée jusqu'à ce que le fichier soit fermé. Contrôle des processus externes RlimitCPU RLimitMem RLimitNProc Apache propose plusieurs directives pour contrôler la quantité de ressources utilisées par les processus externes. Ces modifications nécessitent un redémarrage pour prendre effet. Sous Linux.

La prise en charge des directives suivantes est disponible uniquement sous UNIX et varie selon les systèmes : b RLimitCPU. Les sections suivantes . les performances peuvent être considérablement améliorées. qui donne des informations sur ServerLimit et MaxClients. Ces trois directives évitent que des programmes malveillants ou mal écrits ne soient hors de contrôle. mais cette directive précise la quantité (en octets) de mémoire utilisée pour chaque processus. b RLimitNProc. La limite souple peut être modifiée entre les redémarrages. La syntaxe est identique à RLimitCPU. Si vous réduisez le nombre de fois où Apache (ou le système d'exploitation) doit lire à partir du disque et écrire sur le disque. La limite dure est optionnelle. consultez le Chapitre 11. Accepte deux paramètres. la limite souple et la limite dure.174 CHAPITRE 9 Performances et évolutivité Cela concerne les scripts CGI engendrés par le serveur et les programmes exécutés via SSI. Amélioration des performances du système de fichiers L'accès au disque est une opération onéreuse en termes de ressources . b RLimitMem. il signale le paramètre maximal autorisé par le système d'exploitation. concernant le temps d'unité centrale (en secondes) auquel un processus a droit. c'est l'un des facteurs de ralentissement pour n'importe quel serveur. La limite dure précise la valeur maximale autorisée pour ce paramètre. La syntaxe est identique à RLimitCPU. mais cette directive précise le nombre de processus. Si cela vous semble confus. Si le mot clé max est utilisé.

un lien symbolique (symlink) est un type de fichier spécial qui pointe vers un autre fichier. ceci peut aussi considérablement améliorer la vitesse d'accès aux fichiers souvent appelés. ceux-ci peuvent servir à contourner les paramètres de sécurité et . la plupart des systèmes d'exploitation modernes présentent des fonctions très efficaces de mise en cache du système de fichiers. La ligne suivante montre un exemple d'entrée /etc/fstab : /dev/hda3 /www ext2 defaults. En outre. Montage de systèmes de fichiers. Il permet de faire apparaître un fichier donné à différents endroits. Par défaut. FollowSymLinks et SymLinksIfOwnerMatch sont deux des paramètres autorisés par la directive Options. laissant ainsi suffisamment de RAM à disposition . grâce à l'option noatime De nombreux systèmes de fichiers Linux peuvent être montés. Apache ne suit pas les liens symboliques. En effet. en particulier pour des serveurs lourdement chargés. grâce à l'option noatime.Gestion de liens symboliques 175 traitent de certains des paramètres que vous pouvez personnaliser pour y parvenir. même s'il conserve la trace de sa dernière écriture. Cela signifie que le système d'exploitation n'enregistre pas le dernier accès à un fichier lors de sa lecture.noatime 1 1 Gestion de liens symboliques Options FollowSymLinks Sous UNIX. Il est créé avec la commande ln d'UNIX. L'opération peut considérablement augmenter la vitesse.

De cette manière. Ainsi. et les performances ne seront pas affectées. Apache doit. ils peuvent être onéreux. Apache doit rechercher les fichiers dans chaque répertoire. les fichiers de configuration par répertoire offrent une manière commode de configurer le serveur et laissent un certain degré de liberté à l'administration déléguée. dans le chemin menant au document desservi. Par exemple. Si vous contrôlez la création du contenu. Toutefois. procéder à une vérification pour s'assurer que le fichier n'est pas un lien symbolique. . Désactiver les fichiers de configuration par répertoire <Directory /> AllowOverride none </Directory> Nous l'avons vu aux précédents chapitres. Quand SymLinksIfOwnerMatch est présent. vers un fichier (ou un répertoire) restreint qui ne serait pas autrement accessible par le Web. si cette fonction est activée. Vous pouvez désactiver cette fonction en ajoutant AllowOverride à votre configuration. il suit un lien symbolique si le fichier de destination appartient à l'utilisateur qui a créé ce lien. les tests n'auront pas lieu. à partir d'une partie publique du site Web. Ces tests devant être réalisés pour chaque élément du chemin ainsi que chaque chemin faisant référence à un objet du système de fichiers.176 CHAPITRE 9 Performances et évolutivité offrent un accès indésirable à des parties de votre système de fichiers. par défaut. vous pouvez créer un lien symbolique. ajoutez une directive Options +FollowSymLinks à votre configuration et évitez l'argument SymLinksIfOwnerMatch.

Désactiver ou réduire la consignation BufferedLogs On Sur les sites Web lourdement chargés. pour chaque requête.Gestion de liens symboliques 177 Configurer la négociation du contenu Nous l'avons vu à la section "Configuration de la négociation du contenu". la consignation peut considérablement ralentir le serveur. Enfin. à l'aide de la directive BufferedLogs (comprise dans mod_log_config pour Apache 2 et versions ultérieures). . Cela peut être accompli avec les extensions de fichiers mais. Vous pouvez télécharger le module mod_log_spread à l'adresse http://wwwbackhand. ce qui réduit les accès au disque. Apache peut desservir différentes versions d'un fichier en fonction de la langue ou des préférences du client.org/mod_log_spread. vous pouvez mettre les journaux en tampon avant qu'ils ne soient écrits sur disque. vous pouvez décider d'utiliser des modules comme mod_log_spread qui permettent de consigner sur le réseau plutôt que sur un disque local. Apache doit accéder au système de fichiers à plusieurs reprises. Vous pouvez réduire son impact en ne consignant pas les accès à tout ou partie des images (comme les boutons de navigation). Si vous devez utiliser la négociation du contenu. ce qui améliore les performances. à la recherche de fichiers possédant les extensions appropriées. au Chapitre 4. De plus. assurez-vous au moins d'utiliser un fichier de correspondance de type.

apache.0/misc/perf-tuning. Les sections suivantes traitent des plus importants. Demander un mécanisme d'acceptation Apache peut utiliser différents mécanismes pour contrôler la manière dont les enfants Apache arbitrent les requêtes.html. Si vous devez utiliser les noms d'hôtes. introduisant un délai dans la réponse au client. HostnameLookups HostnameLookups off Quand HostnameLookups est paramétré sur on ou double. Apache réalise une recherche DNS pour capturer le nom d'hôte du client. par exemple lorsqu'un nom d'hôte est utilisé dans des règles Allow ou Deny (voir Chapitre 6). Vous trouverez d'autres informations à l'adresse http://httpd. Le mécanisme optimal dépend de la plate-forme spécifique et du nombre de processeurs. Le paramètre par défaut vaut HostnameLookups off. même si HostnameLookups est réglé sur off.org/docs/ 2.178 CHAPITRE 9 Performances et évolutivité Personnalisation du réseau et des paramètres de statut Plusieurs paramètres Apache liés au réseau peuvent dégrader les performances. D'autres paramètres peuvent déclencher une recherche DNS. vous pouvez toujours traiter les journaux de requête avec un système de résolution de journaux par la suite (voir Chapitre 3). .

ou vérifiez au moins que ExtendedStatus soit réglé sur off. Cette capacité n'est implémentée que dans Apache 2. KeepAlive KeepAlive On KeepAliveTimeout 5 MaxKeepAliveRequests 500 HTTP 1. ce qui améliore les performances.22 et versions ultérieures. HTTP 1. vous permettent de désigner certains sockets d'écoute comme gérant des protocoles spécifiques.1 permet de desservir plusieurs requêtes sur une seule connexion.3. AcceptFilter AcceptFilter http data AcceptFilter https data Plusieurs systèmes d'exploitation. comme Linux et FreeBSD. Pour obtenir des performances optimales. il peut aussi ralentir le serveur. Il est ainsi possible de demander au kernel de ne transférer une requête à Apache qu'une fois que tout le contenu de la requête HTTP a été reçu. Même s'il peut être utile pour dépanner Apache.Personnalisation du réseau et des paramètres de statut 179 mod_status Ce module collecte des statistiques sur le serveur.0 offre la même chose avec des extensions de maintien en activité (keep alive). les connexions et les requêtes. La directive KeepAliveTimeout permet de spécifier le délai maximal . spécifique à BSD et présente dans Apache 1.1 et versions ultérieures. le paramètre par défaut. même s'il existe une version précédente de la directive AcceptFilter. désactivez ce module.

ce qui peut gêner l'évolutivité. la connexion et le processus Apache sont liés pendant le temps d'attente. Vous pouvez également . Eviter les abus TimeOut LimitRequestBody LimitRequestFields LimitRequestFieldSize LimitRequestLine LimitXMLRequestBody Les attaques de refus de service submergent votre site d'un grand nombre de requêtes simultanées.180 CHAPITRE 9 Performances et évolutivité (en secondes) pendant lequel le serveur attend avant de terminer une connexion inactive. Citons comme autres types d'abus l'envoi de requêtes extrêmement volumineuses ou l'ouverture d'un grand nombre de connexions simultanées. D'autre part. Ces attaques sont difficiles à éviter . vous pouvez bloquer ces adresses au niveau du serveur Web. comme indiqué précédemment. par exemple. Vous pouvez. Augmenter la temporisation signifie que vous augmenterez les chances que la connexion soit réutilisée. ou encore avec les filtres réseau installés au niveau du système d'exploitation. empêcher des adresses spécifiques de générer des requêtes sur le serveur . mais il vaut mieux procéder au niveau du pare-feu ou du routeur du réseau. La directive MaxKeepAliveRequest permet de spécifier le nombre maximal de fois où la connexion sera réutilisée. ce qui ralentit le serveur et empêche d'accéder aux clients légitimes. la manière la plus efficace de les traiter consiste généralement à agir au niveau du réseau ou du système d'exploitation.

Vous trouverez ce module à l'adresse http://www. il est possible qu'un site Web dégrade les performances du service dans son ensemble. Restriction des connexions et de la bande passante Si vous fournissez des services d'hébergement à plusieurs clients. LimitRequestFieldSize. une adresse IP de client spécifique. le nombre de requêtes simultanées. LimitRequestLine et LimitXMLRequestBody. LimitRequestFields. A noter que plusieurs directives permettent de contrôler la taille du corps de la requête et des en-têtes : LimitRequestBody.3 autorise le paramétrage des limites de bande passante sur tout le serveur ou par connexions. .html. de sorte à s'assurer que l'impact sur d'autres clients et sur le serveur dans son ensemble soit minimal. ralentit généralement la livraison du contenu selon le fichier demandé. L'étranglement. Plusieurs modules Apache permettent de mesurer et de contrôler la bande passante et le nombre de connexions. Le module mod_bandwidth d'Apache 1.com/mod_bandwidth. dans ce contexte.cohprog . La temporisation par défaut des requêtes est de 300 secondes. etc. de la taille des fichiers.Restriction des connexions et de la bande passante 181 limiter la taille des requêtes et des temporisations pour réduire l'effet des attaques. Cela peut être dû au fait que le site Web provient d'une page d'actualités à fort trafic (effet dit "Slashdot") ou qu'il héberge un ensemble très demandé de fichiers musique ou vidéo. mais vous pouvez la modifier à l'aide de la directive TimeOut. en fonction du répertoire spécifique. de l'adresse IP ou du domaine distant.

qui restreint l'utilisation en fonction du nombre de connexions simultanées par adresses IP et limite le débit auquel Apache envoie des données au client.robotcop.com/modules .com/Software/mod_require _host/index.3. Le module mod_throttle réduit la bande passante pour chaque hôte virtuel ou utilisateur. Le module Robotcop permet d'éviter que des robots n'accèdent à des parties de sites possédant des limites. Il est compatible avec Apache 1.cyberheatinc. mod_tsunami permet de limiter le nombre d'enfants Apache pour chaque hôte virtuel.topology.org/src/bwshare/ README . Vous trouverez ce module à l'adresse : http://sourceforge.org/. Vous trouverez ce module à l'adresse : http://www. Vous trouverez ce module à l'adresse : http://os.3 et versions antérieures d'Apache 2. Vous trouverez ce module à l'adresse : http://www. mod_choke est un module destiné à Apache.snert. mod_require_host permet de limiter l'accès à ces clients (par exemple à de nombreux vers IIS) qui ne fournissent pas d'en-tête d'hôte et tentent simplement de se connecter à votre adresse IP.shtml.com/ Software/mod_throttle/index. pour Apache 1. Vous trouverez ce module à l'adresse : http://www.html.shtml.net/projects/ mod-tsunami/.php?name= Content&pa=showpage&pid =7.snert.182 CHAPITRE 9 Performances et évolutivité Le module bandwidth share s'occupe de l'étranglement de la bande passante et de l'équilibrage. en fonction de l'adresse IP du client. . Vous trouverez ce module à l'adresse : http://www.

Parfois cependant.txt. les robots Web ne respectent pas le fichier robots.org/ Les "robots du Web" désignent une catégorie de programmes qui téléchargent des pages de votre site Web. qui contient des instructions sur la manière d'accéder à votre site et sur les parties du site qui ne seront pas disponibles. La syntaxe du fichier se trouve à l'adresse http://www . Vous pouvez faire cesser les requêtes au niveau du routeur ou du système d'exploitation.robotstxt.org. afin de le consulter hors connexion ultérieurement. Des moteurs de recherche sur le Web font appel à ces programmes pour parcourir Internet à la recherche de serveurs Web . de manière récursive. Généralement.Gestion des robots 183 Gestion des robots http://www. Un utilisateur lambda les exploite pour télécharger tout ou partie d'un site Web. . Les robots traditionnels demandent un fichier particulier. ils téléchargent leur contenu et l'indexent.txt. mais ils peuvent parfois être très agressifs et inonder votre site d'un nombre de connexions simultanées trop important ou s'enfermer dans des boucles cycliques. en suivant. appelé robots.robotstxt. ces programmes se comportent bien. Vous pouvez alors utiliser le module Apache Robotcop (mentionné à la section précédente) qui permet d'arrêter les robots au comportement indélicat. les liens qu'il contient.

184 CHAPITRE 9 Performances et évolutivité Proxy inverses et systèmes d'équilibrage des charges mod_proxy_http mod_backhand http://www. un ou plusieurs serveurs frontaux légers traitent le contenu statique et gèrent les requêtes SSL et les connexions lentes. qui montre comment améliorer les performances d'une configuration de serveur unique. Dans cet ensemble d'architectures. le module mod_backhand (qui provient d'Apache 1. Plusieurs sociétés proposent des produits commerciaux qui implémentent cette fonctionnalité.3) assure une redirection dynamique des requêtes HTTP dans une grappe de machines. tout en relayant les requêtes vers des URL spécifiques à des serveurs d'arrière-guichet spécialisés. .backhand. ainsi que la fiabilité de votre configuration. en fonction des ressources disponibles.org/mod_backhand/ Nous avons parlé jusqu'à présent de l'évolutivité verticale. Dans cette configuration. vous pouvez prolonger les capacités en ajoutant simplement de nouvelles machines et en améliorant la quantité de trafic auquel vous pouvez répondre. Le Chapitre 10 est consacré à l'utilisation d'Apache sous forme de proxy inverse. Enfin. en s'appuyant sur des structures matérielles. La distribution des charges sur plusieurs serveurs Web correspond à l'évolutivité horizontale.

etc. certaines ressources qui figurent sur plusieurs pages mais ne sont pas souvent modifiées. car le contenu dynamique doit généralement accéder aux bases de données. Cela accélère ensuite l'accès au site Web de vos clients. vous pouvez compresser les fichiers téléchargeables volumineux (voire les fichiers HTML statiques) et utiliser la négociation du contenu. en particulier pour ceux disposant de liens lents. sont transmises une fois seulement pendant une période donnée. Le Chapitre 11 explique comment utiliser le module de filtrage mod_deflate pour compresser le contenu HTML. vous pouvez réduire le nombre et la taille de vos images. De plus. qui indiquent aux clients et aux proxy la validité temporelle des ressources demandées. De plus. comme indiqué aux précédents chapitres. comme les logos ou les boutons de navigation. . Vous pouvez automatiser une partie du traitement en employant les outils de ligne de commande ImageMagick (http://www. De cette manière. Le contenu sera livré plus rapidement et le processus sera libéré plus tôt pour répondre aux autres requêtes.imagemagick. Cela peut être utile si les ressources d'unité centrale sont disponibles et que des clients se connectent sur des liens ralentis. vous pouvez utiliser mod_cache (voir Chapitre 10) pour mettre en cache un contenu dynamique. traiter des modèles. Pour vous aider à réaliser cela. Autre moyen de réduire la charge sur le serveur : diminuer la somme de données transférées au client. ce qui peut consommer des ressources considérables. de sorte qu'il ne soit pas nécessaire de le créer pour chaque requête.org).Mise en cache et compression 185 Mise en cache et compression Le moyen le plus rapide de desservir du contenu consiste… à ne pas le desservir du tout ! Vous pouvez pour cela employer les en-têtes HTTP appropriés.. Cela peut considérablement améliorer les performances.

ils fonctionnent ou évoluent souvent mieux qu'Apache concernant certaines tâches. Certains des projets comprennent également d'autres fonctions populaires d'Apache. D'autre part. le langage de développement Web le plus populaire qui s'exécute sous Apache. Plusieurs modules peuvent vous aider.acme. . par exemple. Les serveurs indiqués ici sont optimisés et légers .com/software/thttpd/ b Boa : http://www.org. Ainsi. plusieurs systèmes de codage et d'optimisation ont été créés pour PHP. ce n'est pas toujours la meilleure solution dans toutes les situations.boa. Alternatives à Apache b lighttpd : http://www. au Chapitre 4). Pour cela précisément.net/ b thttpd : http://www. sûr et extrêmement flexible. par exemple.lighttpd. des sites Web populaires (comme Slashdot) emploient Apache exécutant mod_perl pour générer du contenu et un serveur différent (comme Boa) pour desservir des images statiques. comme la réécriture des URL et la prise en charge du PHP. par exemple images.org Apache est un serveur Web portable. FastCGI et mod_perl peuvent servir à accélérer l'exécution d'un script CGI (voir la section "Amélioration des performances du script CGI". la plupart des étranglements ont lieu aux niveaux de l'accès à la base de données et de la génération du contenu. Cela s'accomplit facilement en envoyant les images à partir d'un domaine différent.186 CHAPITRE 9 Performances et évolutivité Optimisations spécifiques aux modules Comme indiqué au début de ce chapitre.slashdot. Ainsi.

La mise en cache permet de réduire simultanément la charge des serveurs et d'allouer un accès plus rapide à votre site par un retour plus rapide aux contenus fréquemment demandés. L'installation d'un proxy permet de créer un point de contrôle pour toute requête HTTP. de manière à améliorer les performances.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. qui peut être utilisé pour unifier les contenus provenant de divers serveurs d'arrière-guichet. . Ce chapitre explique comment profiter de la mise en cache et des fonctions de proxy qui permettent d'implémenter des architectures flexibles et évolutives.

Dans la version 2. Un proxy inverse est un serveur Web placé devant les autres serveurs. Pour les navigateurs Web.0. . Un proxy HTTP traditionnel.2 Dans Apache 1. la prise en charge de la mise en cache faisait partie de mod_proxy et ne pouvait pas être utilisée séparément.3. aussi appelé proxy ordinaire.188 CHAPITRE 10 Proxy Apache et mise en cache Proxy ordinaires et inverses Il existe différents types de proxy Web. 2.0 et 2. Différences entre Apache 1. même si le code en résultant est considéré comme expérimental. La situation a changé avec les versions 2. contacte le serveur distant et renvoie la réponse. le proxy inverse est le "vrai" serveur. Il relaye les requêtes lorsque c'est nécessaire jusqu'aux serveurs d'arrière-guichet. qui propose une façade unifiée et agit ainsi comme une passerelle. où la fonctionnalité est désormais considérée mature. car il est le seul à interagir avec lui.3.2.1 et 2. la fonction a été divisée en deux modules distincts. accepte des requêtes de clients (généralement des navigateurs Web).

0 </Proxy> . L'arrière-guichet FTP permet au serveur proxy d'agir en tant que passerelle pour accéder aux serveurs FTP distants via un navigateur HTTP normal.255.0.1 et ultérieures) --enable-proxy-ajp (Apache versions 2.Activation de la prise en charge de mod_proxy 189 Activation de la prise en charge de mod_proxy Apache 1. et ajp. qui fournit la prise en charge de l'équilibrage des charges.1 et supérieures d'Apache incluent deux modules proxy additionnels : balancer. Les versions 2. CONNECT et FTP. L'option CONNECT permet aux connexions SSL de transiter sans perte d'intégrité via le proxy. fréquemment utilisé pour communiquer avec Tomcat et d'autres moteurs de servlet.allow Deny from all Allow from 10.0. qui assure la prise en charge du protocole AJP.0/255.1 et ultérieures) Pour activer la prise en charge des proxy dans Apache.255. vous devez activer le module proxy principal et tout ou partie des trois arrière-guichets pris en charge : HTTP.3 --enable-module=proxy --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-balancer (Apache versions 2. Activation de la prise en charge des proxy ordinaires ProxyRequests on <Proxy *> Order deny.

190 CHAPITRE 10 Proxy Apache et mise en cache Les proxy ordinaires ont connu une grande popularité aux premiers jours d'Internet. Vous pouvez activer les fonctionnalités des proxy ordinaires en utilisant ProxyRequests On. ils sont plus souvent implémentés dans des entreprises qui doivent contrôler la navigation de leurs employés. et offraient une isolation par rapport au monde extérieur. Les connexions rapides et les NAT (Network Address Translation) intégrés dans la plupart des dispositifs de passerelle ont considérablement réduit les besoins de proxy ordinaires. puisqu'ils permettaient à plusieurs machines de partager facilement une connexion vers le monde extérieur. comme indiqué dans l'exemple. les entreprises mettent en place des proxy de filtrage qui éliminent ces menaces avant qu'elles ne parviennent sur le bureau des utilisateurs. Cela commence à changer. La plupart des serveurs proxy incluaient des fonctions de mise en cache. Vous pouvez y parvenir en utilisant la directive de section <proxy>. A mesure que se multiplient les virus et les logiciels espion. . utilisant le proxy pour consigner. L'exemple montre comment restreindre l'accès du proxy à un espace réseau spécifique. De nos jours. où ils servent de passerelles. Il est conseillé de retreindre la prise en charge du proxy uniquement aux clients autorisés (voir Chapitre 6). utiles lors du partage de connexions lentes. filtrer et autoriser les accès aux sites web. Les proxy ont trouvé une nouvelle jeunesse dans le monde des réseaux sans-fil.

Vous pouvez.exemple. .com/ </Location> Au final. Chaque fois que les utilisateurs doivent utiliser une application. Vous pouvez intégrer ces services dans votre site principal. par exemple.com/bugzilla Un proxy inverse peut offrir un frontal unifié pour plusieurs ressources d'arrière-guichet. disposer d'un serveur sur lequel tourne une application CRM et d'un autre sur lequel tourne un outil de recherche de bogues. lorsque la machine de proxy inverse recevra une requête pour http://www.exemple.Utilisation d'un proxy inverse pour unifier un espace URL 191 Utilisation d'un proxy inverse pour unifier un espace URL ProxyPass /crm http://crm.com/login/ index.exemple.com/crm/login/ index.html au serveur d'arrière-guichet et renverra le document au navigateur. La directive ProxyPass peut être utilisée seule ou à l'intérieur d'une section <Location>. décrit à la section suivante.exemple. ainsi que le montre l'exemple suivant : <Location /crm> ProxyPass http://crm. en utilisant ProxyPass. il leur faut taper une adresse différente. comme indiqué dans l'exemple. en associant certaines URL sur la machine frontale à des serveurs Web d'arrière-guichet spécifiques. Désormais.html. elle demandera http://crm.com/ ProxyPass /bugzilla http://backend.exemple. vous pourrez utiliser ProxyPass simultanément avec ProxyPassReverse.

192 CHAPITRE 10 Proxy Apache et mise en cache Masquage des serveurs d'arrière-guichet ProxyPass /crm http://crm. par exemple dans l'en-tête Location:. vous pouvez utiliser mod_proxy_html.com ProxyPassReverse /crm http://crm. Info Sachez que la directive ProxyPassReverse opère seulement au niveau de l'en-tête HTTP. remplaçant ainsi les pages d'erreur reçues de l'arrière-guichet. le serveur d'arrière-guichet émet des pages de redirection ou d'erreur qui contiennent des références à lui-même. De plus. Vous pouvez télécharger ce module à l'adresse http://apache. un module Apache 2 qui permet de parcourir les documents desservis via le proxy et de réécrire le code HTML à la volée. il ne soupçonne pas l'existence des serveurs d'arrière-guichet. Les directives ProxyPassReverseCookiePath et ProxyPassReverseCookieDomain opèrent de façon analogue. . ProxyErrorOverride (uniquement disponible dans Apache 2) permet d'afficher la page d'erreur du serveur proxy.exemple. Afin de réaliser cela. mais sur le chemin et les chaînes de domaine situés sur les en-têtes Set-Cookie:.exemple.exemple.com ProxyErrorOverride On Au cours du processus décrit à la section précédente. La directive ProxyPassReverse intercepte ces en-têtes et les réécrit de manière qu'ils contiennent une référence au proxy inverse (www. même en cas de messages d'erreur. ni ne réécrit les liens qui sont contenus à l'intérieur des documents HTML. le client n'a contacté que le serveur de proxy inverse . Parfois cependant. Elle ne vérifie pas.webthing.com/ mod_proxy_html/. Cela permet de mieux masquer l'existence de ce serveur et d'obtenir un frontal constant.com).

les navigateurs présentant des bogues et les gros fichiers multimédias peuvent mobiliser des ressources précieuses des serveurs créateurs de contenu. . la configuration montrée ici enverra toutes les requêtes à un site d'arrière-guichet. On appelle ce phénomène un "problème de fermeture persistante". à l'exception des requêtes d'images.Eviter l'inversion des URL en proxy 193 Eviter l'inversion des URL en proxy ProxyPass /images/ ! ProxyPass / http://crm. un thread (ou un processus) enfant d'Apache sera occupé à le desservir jusqu'au terme du téléchargement.com Certaines URL peuvent ne pas être mises en proxy si vous placez un point d'exclamation (!) sur l'URL du site distant dans les directives ProxyPass. Un scénario analogue survient lorsqu'une implémentation TCP/IP boguée ne parvient pas à fermer correctement une connexion au serveur à la fin d'une transmission. Les clients lents des lignes par modem. Amélioration des performances ProxyIOBufferSize 1024000 Les proxy inverses peuvent également être très utiles si vous disposez de serveurs Web et de serveurs d'application complexes et surchargés. Il est important que ces directives soient placées en aval des autres directives ProxyPass. qui seront desservies localement. Par exemple.exemple. Si un client requiert un gros fichier statique et le télécharge lentement.

Cependant. si vous employez mod_perl dans Apache 1. avec possibilité d'avoir un thread dédié dont la tâche consiste à attendre la fermeture des connexions. avec des threads. .3 avec de nombreux autres modules Perl chargés et quelques données mises en cache. Cela réduit la charge imposée au serveur d'arrière-guichet mais accroît la consommation de mémoire de la machine du proxy. Si l'un d'eux "perd du temps" à vouloir desservir un fichier statique ou attendre la fermeture d'une connexion. qui desservent des contenus statiques et s'occupent des clients lents et bogués. le vrai problème survient lorsque vous utilisez des MPM basés sur les processus (tel le MPM Prefork). Un proxy inverse peut aider dans ce cas. à mesure qu'ils mûrissent. Vous pouvez personnaliser ProxyIOBufferSize de manière que les gros fichiers soient transférés rapidement au proxy inverse et que la connexion au serveur d'arrière-guichet soit libérée aussi tôt que possible. Ces MPM. Vous pouvez avoir un ou plusieurs frontaux Apache légers. Ainsi. Dans Apache 2. permettent à Apache de mieux évoluer dans bon nombre de situations.1. les enfants Apache qui en résultent auront probablement une taille de quelques mégaoctets. moins de ressources seront disponibles pour servir les requêtes restantes. de récents MPM permettent à un même enfant Apache de gérer plusieurs connexions. ainsi que des serveurs toutes fonctionnalités en arrière-guichet qui s'occupent de générer le contenu dynamique. même si ces situations sont rarement évitables.194 CHAPITRE 10 Proxy Apache et mise en cache Cela entraîne une mobilisation excessive des ressources jusqu'à ce que la connexion soit fermée pour cause de dépassement du délai.

l'en-tête Host: est modifié dans la requête de proxy pour correspondre au nom d'hôte spécifié dans la directive ProxyPass. Puisque le point final du SSL est le proxy inverse.Déchargement du processus SSL 195 Déchargement du processus SSL Nous l'avons vu au Chapitre 7. il est préférable de préserver la valeur originale de l'en-tête. certaines informations (telles que celles liées au certificat) sont perdues et n'atteignent pas le serveur d'arrière-guichet. Dans certaines situations. . "SSL et TLS". La manière de réaliser cela est décrite aux deux sections suivantes. Transfert des informations de proxy dans les en-têtes ProxyPreserveHost on Quand Apache agit en tant que proxy inverse. L'en-tête Host: original est placé dans un autre en-tête. les calculs requis font de SSL un protocole gourmand en ressources. Un moyen de résoudre ce problème consiste à disposer de boîtes dédiées et optimisées faisant fonctionner un proxy inverse avec une prise en charge SSL. Cela peut avoir un impact sur les performances de votre serveur d'arrière-guichet d'une manière similaire à celle décrite dans la section précédente. peut éventuellement faire les authentifications basées sur des certificats et transmet les requêtes en HTTP brut aux serveurs d'arrière-guichet. XForwarded-Host. Le proxy inverse réalise l'ensemble des opérations lourdes : il traite les requêtes SSL. Le contenu est généré et renvoyé au proxy inverse. qui réalise la tâche (gourmande en ressources) consistant à le crypter.

Pour ajouter la valeur à un en-tête existant. b X-Forwarded-Host. Manipulation des en-têtes Header set nom-en-tete valeur-en-tete Vous pouvez envoyer des informations supplémentaires à un serveur d'arrière-guichet en utilisant la directive Header. Vous pouvez ajouter un en-tête HTTP de réponse. . Si vous voulez ajouter un nouvel en-tête plutôt qu'en remplacer un existant.196 CHAPITRE 10 Proxy Apache et mise en cache Cela peut être fait en activant ProxyPreserveHost on dans le fichier de configuration. Nom d'hôte pour le serveur proxy. Celui-ci enregistre quelques-unes de ces informations dans de nouveaux en-têtes qui sont ajoutés à la requête faite au serveur d'arrière-guichet : b X-Forwarded-For. effacer certains en-têtes ou ajouter un en-tête de requête à la réponse. unset et echo. comme indiqué à la section suivante. b X-Forwarded-Server. Adresse IP ou nom d'hôte du client. Vous pouvez envoyer des informations supplémentaires en utilisant les directives Header et RequestHeader. en utilisant Header set. Certaines informations de la requête sont perdues lorsqu'un proxy inverse est installé. en supprimant tout autre en-tête HTTP ayant le même nom et pouvant être présent. employez Header add. Ce module peut être utilisé pour ajouter ou supprimer des en-têtes arbitraires dans les requêtes et réponses HTTP. adoptez respectivement append. comme montré dans l'exemple. Hôte original demandé. fournie par le module mod_headers.

vous devrez tout d'abord indiquer à mod_ssl de stocker ces informations dans des variables d'environnement. vous pouvez l'utiliser pour transmettre des informations sur une connexion SSL et des certificats au serveur d'arrière-guichet. CacheRoot permet de spécifier la localisation des fichiers mis en cache et CacheSize la taille totale du cache (en kilo-octets).1. le proxy pourra vérifier qu'il est déjà présent dans son cache. Implémentation d'un proxy de cache CacheRoot /usr/local/apache/cache CacheSize 500000 CacheGcInterval 6 CacheMaxExpire 12 L'un des avantages d'un proxy réside dans le fait qu'il est capable de mettre en cache les informations qu'il dessert. "Journaux et surveillance"). vous pouvez passer cette étape et accéder directement aux variables d'environnement SSL.3. avec %{nom-variable}s. avec SSLOptions +StdEnvVars. La prochaine fois que ce contenu sera demandé. Ce fonctionnement est semblable à celui de la directive LogFormat (voir Chapitre 3. Il existe plusieurs autres directives de configuration que vous pouvez utiliser pour modifier le comportement de la mise en cache.Implémentation d'un proxy de cache 197 Vous pouvez modifier les en-têtes des requêtes envoyées au client en utilisant RequestHeader au lieu de Header. la fonctionnalité de mise en cache est implémentée dans le cadre du module mod_proxy. Ces directives représentent un exemple de configuration. Vous pouvez ajouter le contenu de variables d'environnement dans l'argument headervalue. Pour cela. et le desservira alors directement. Dans Apache 2. à l'aide de la chaîne de format %{nomvariable}e. . Dans Apache 1. Par exemple.

1/2. ainsi qu'un préfixe d'URL. la principale fonctionnalité de mise en cache est implémentée par mod_cache. sans avoir à être comparé à la source originale. Dans Apache 2. . Il est également possible de recourir à l'utilitaire de ligne de commande htcacheclean.198 CHAPITRE 10 Proxy Apache et mise en cache CacheGcInterval permet de spécifier la fréquence (en heures) à laquelle le cache sera périodiquement "purgé". Considérée comme étant expérimentale dans Apache 2. Les requêtes qui contiennent le préfixe URL seront mises en cache par l'arrière-guichet spécifique. la mise en cache est reconnue en tant que fonctionnalité de qualité dans Apache 2. Vous pouvez utiliser CacheDisable pour désactiver la mise en cache d'URL spécifiques.2. qui stocke les ressources mises en cache directement en mémoire et mod_disk_cache. Mise en cache dans Apache 2 CacheEnable disk / CacheRoot /usr/local/apache/cache La fonctionnalité de mise en cache et de mise en proxy dans Apache a été séparée en deux modules distincts depuis Apache 2.0. afin d'être en adéquation avec le réglage CacheSize. afin de réduire le cache à intervalles prédéfinis lors de l'utilisation de l'arrière-guichet disk. La directive CacheEnable prend un paramètre d'arrière-guichet de mise en cache (mem ou disk). Ce module possède à son tour deux arrière-guichets : mod_mem_cache. qui utilise le système de fichiers. CacheMaxExpire spécifie le temps maximal pendant lequel un document peut rester dans le cache et être toujours considéré comme étant valable.

vous devrez redémarrer le serveur pour que les changements prennent effet..exemple.gif MMapFile /usr/local/apache/htdocs/button_left.com/ BalancerMember http://www2. Le code d'équilibrage des charges est générique et permet d'équilibrer de multiples autres protocoles en plus du HTTP. .2.com/ BalancerMember http://www3. vous devez d'abord définir un groupe de serveurs d'arrière-guichet avec une section <proxy balancer://. vous pouvez utiliser mod_file_cache pour dire à Apache de mettre en correspondance les fichiers spécifiques en mémoire ou de mettre en cache les gestions de fichiers : CacheFile /usr/local/apache/htdocs/navigationbar.png Si vous modifiez l'un des fichiers statiques. Pour le configurer. comme indiqué ici.allow Deny from all Allow from localhost </Location> <Proxy balancer://balancer/ stickysession=PHPSESSIONID> BalancerMember http://www1.Equilibrage des charges 199 De même.exemple. Equilibrage des charges <Location /balancer-manager> SetHandler balancer-manager Order deny.. si certains de vos fichiers sont fréquemment demandés et si vous savez qu'ils ne changeront pas pendant la durée de vie du serveur.>.exemple.com/ </Proxy> ProxyPass /content balancer://balancer/ Disponible depuis Apache 2. mod_proxy inclut un nouvel arrière-guichet qui offre des capacités d'équilibrage des charges.

à l'aide de la commande régulière status. . Enfin.0. Chaque identifiant et élément du système d'équilibrage peut prendre des options pour spécifier des stratégies d'équilibrage (en fonction du trafic). à l'aide de la commande balancer-manager. Vous bénéficiez ainsi de quelques-unes de leurs nouvelles fonctionnalités dans mod_proxy. du pooling des connexions (leur mise en commun) et de la prise en charge des sessions.200 CHAPITRE 10 Proxy Apache et mise en cache Une fois défini. Comme indiqué dans l'exemple. Il est désormais possible de remplacer mod_jk par les modules mod_proxy et mod_proxy_ajp. pour communiquer avec des serveurs d'applications et des moteurs de servlet. par exemple l'équilibrage des charges.0.1:8009/myapp ProxyPassReverse /myapp ajp://127. tels que Tomcat et Jetty. 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). Ce protocole est généralement utilisé par un autre module Apache. mod_proxy inclut un protocole d'arrièreguichet AJP. et la manipuler. mod_jk.0.1:8009/myapp Depuis Apache 2. Connexion à Tomcat ProxyPass /myapp ajp://127. vous pouvez vérifier le niveau de votre configuration. vous pouvez utiliser l'ID du système d'équilibrage avec une directive ProxyPass régulière. des pannes.0.

la section "Activation de la prise en charge des proxy ordinaires"). Apache n'est pas forcément le meilleur choix dans tous les scénarios. de manière "transparente".ch/pound/ Nous l'expliquions au Chapitre 9. Il existe ainsi plusieurs autres serveurs proxy spécialisés qui pourraient fonctionner de façon plus satisfaisante. Ces machines interceptent les requêtes HTTP au niveau de la couche réseau.org/ Pound http://www. un proxy ordinaire de mise en cache requiert que chaque client soit correctement configuré. Deux des serveurs proxy Open Source les plus populaires se nomment Pound et Squid : b Squid est sorti à peu près au même moment qu'Apache.apsis. Il est aussi possible d'implémenter des proxy dits "transparents". elles les desservent au travers d'un serveur proxy sans que l'utilisateur final ne s'en aperçoive.Autres proxy 201 Autres proxy Squid http://www. Proxy HTTP transparents Nous l'avons vu. Les proxy transparents sont toujours populaires auprès des FAI qui veulent réduire les coûts de bande passante ou contrôler les habitudes de navigation de leurs clients. Ensuite. selon vos besoins. b Pound est un serveur proxy léger. plus haut. souvent utilisé comme proxy inverse SSL.squid-cache. Il est fortement configurable et excelle dans la mise en cache. . Certaines organisations utilisent aussi des proxy transparents pour filtrer les logiciels espion et les virus (voir. "Performances et évolutivité".

et modifie les règles de transfert des paquets du système d'exploitation. suivez ce lien de la documentation de projet Linux : http://www. .html. tel que Squid.org/HOWTO/Transparentproxy.tldp. Pour plus d'informations sur la configuration de proxy HTTP transparents.202 CHAPITRE 10 Proxy Apache et mise en cache Une configuration type d'un proxy transparent fait appel à un serveur averti de la mise en proxy transparente.

La couche de protocole a été analysée. Améliorent les performances et l'évolutivité du serveur. b Modules de Protocole. des modules existants peuvent en être retirés. Permettent aux modules de traiter le contenu fourni par d'autres modules. Apache 2 prolonge ce concept de modularité et introduit trois nouvelles voies d'extension du serveur : b Modules multitraitement (MPM). . afin de fournir des fonctionnalités avancées. Il est donc possible pour Apache de desservir un contenu utilisant d'autres protocoles. tels que FTP. b Modules de Filtrage. De nouveaux modules peuvent y être ajoutés. de sorte à réduire la taille du serveur. Permettent de modifier la manière dont les serveurs Apache desservent les requêtes. et ainsi améliorer les performances.11 Multitraitement et modules de protocole Evolution de l'architecture Apache Apache n'est pas un serveur monolithique. De même.

Pour sa part. vous sélectionnez un MPM pendant la configuration et vous montez le processus avec l'option --with-mpm. Avec Apache 2. Cela signifie qu'un processus parent réalise des copies identiques de lui-même. Chacun des enfants peut desservir une requête indépendamment des autres.204 CHAPITRE 11 Multitraitement et modules de protocole Sélection d'un module multitraitement --with-mpm=worker --with-mpm=prefork Même si la sélection du MPM dépend de plusieurs facteurs (dont la prise en charge de modules et de fonctionnalités tiers spécifiques). Plusieurs autres modules sont distribués avec le serveur et utilisés à titre expérimental. Les sections suivantes décrivent les fonctions des différents MPM et indiquent la manière de les configurer.3. Actuellement. UNIX possède deux MPM stables : prefork et worker. Windows possède ses propres MPM basés sur des threads. le serveur procède à une "bifurcation" (un fork) sur plusieurs enfants. les processus sur AIX étant "lourds". Ainsi. un MPM avec des threads sera préférable pour l'évolutivité qu'il apporte. appelées des enfants. Sachez toutefois qu'il n'est pas possible de modifier le mécanisme de traitement des requêtes dans Apache 1. certains MPM se comportent mieux sur certaines plates-formes. Découverte des MPM basés sur les processus Avec une configuration de serveur basé sur les processus. Cette approche présente l'avantage .

L'amélioration de la stabilité s'accompagne d'une pénalité au niveau des performances : chacun des enfants mobilise de la mémoire supplémentaire. propose un MPM prefork qui lui permet de fonctionner comme un serveur basé sur les processus. et le système d'exploitation perd un certain temps à changer de contexte. A noter qu'Apache permet de configurer le nombre d'enfants à établir au démarrage. La valeur par défaut est 5 .3 est un serveur basé sur les processus. cette approche complique la communication entre les processus et le partage de fichiers. Celle-ci prend un argument unique.Configuration de MPM Prefork 205 d'améliorer la stabilité : si l'un des enfants se comporte mal. Configuration de MPM Prefork StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 Vous pouvez contrôler le nombre de processus créés au démarrage. elle convient pour la plupart des sites web. ainsi que le nombre maximal d'enfants possibles (voir section suivante). à l'aide de la directive StartServers. De plus. Ne modifiez ce réglage que si vous gérez un site Web très fréquenté. Prefork signifie qu'un enfant peut être créé au démarrage. Apache 1. plutôt que lorsqu'une requête arrive. il peut être arrêté sans que cela n'affecte le reste du serveur. indiquant le nombre de serveurs à faire bifurquer lorsque le serveur démarre. quant à lui. . Apache 2. par exemple en perdant de la mémoire.

Au final. Le serveur arrête le processus et le remplace par un nouveau. Dans Apache 2. MaxSpareServers fixe le nombre maximal de processus inactifs autorisés. dans la limite des capacités du système d'exploitation ou en fonction du nombre maximal d'enfants possibles. Comme expliqué précédemment dans ce chapitre. La valeur par défaut. Dans Apache 1. Sachez qu'elle ne dénombre pas les requêtes multiples qui réutilisent la même connexion. cela permet d'éviter les fuites de mémoire pour des processus qui fonctionnent depuis un long moment. présentée dans l'exemple. puis recompiler le serveur. le nombre maximal d'enfants possible est codé en dur à 256.Si le nombre de serveurs inactifs dépasse ce réglage. devrait être suffisante pour la plupart des serveurs. A l'inverse. .h. en utilisant la directive ServerLimit. Si le nombre de serveurs inactifs descend sous cette valeur. vous pouvez limiter le nombre de requêtes traitées par un processus spécifique. vous devez intervenir sur le réglage HARD_SERVER_LIMIT dans httpd. certains d'entre eux sont arrêtés. Apache engendre de nouveaux enfants. après le nombre spécifié de requêtes.206 CHAPITRE 11 Multitraitement et modules de protocole MaxClients permet de contrôler le nombre maximal de processus engendrés. Pour modifier cette valeur. La directive MinSpareServers définit le nombre maximal de processus pouvant rester inactifs (les requêtes ne sont pas traitées) à un moment donné. cette valeur peut être modifiée dans la configuration. en utilisant la directive MaxRequestsPerChild.3. Vous pouvez fixer la valeur de MaxRequestsPerChild sur 0 pour empêcher que les processus ne soient arrêtés après un nombre défini de requêtes.

Configuration de MPM Worker StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 Le MPM Worker est un MPM Apache 2 qui permet de combiner les processus et les threads. Les serveurs basés sur des processus ou des threads présentent chacun des avantages et des inconvénients. en utilisant la directive StartServers. MPM Worker.MPM basés sur des threads et MPM hybrides 207 MPM basés sur des threads et MPM hybrides Les threads sont semblables aux processus. Toutefois. ce nombre sera spécifié par la directive ThreadsPerChild. comme avec le MPM Prefork. Le MPM Apache. mais ils peuvent partager de la mémoire et des données avec d'autres threads. chacun contenant plusieurs threads. qui autorise une approche mixte. un thread se comportant mal est capable d'écraser et de corrompre des données ainsi que du code appartenant à d'autres threads. est un exemple de MPM de serveur basé sur les threads. Un serveur peut engendrer différents processus. Chacun des processus possédera plusieurs threads . . Les développeurs d'Apache ont créé un MPM basé sur des threads. Vous pouvez spécifier le nombre de processus qui seront créés au démarrage. En effet. l'inconvénient est qu'un code mal écrit peut faire tomber le serveur. Cela présente l'avantage de ne pas nécessiter de changement de contexte (les threads font partie du même processus). destiné à la plate-forme Windows.

MaxThreadsPerChild spécifie le nombre maximal de threads par processus . A l'instar du Prefork. afin de maintenir le nombre total de threads dans les limites spécifiées.1. les threads restants pouvant traiter des requêtes au lieu d'attendre que le client ferme une connexion ou . Ce sont les contreparties des directives MaxSpareServers et MinSpareServers dans les serveurs basés sur les processus. mais les processus sont créés ou détruits. MaxClients spécifie le nombre maximal de processus. Le nombre maximal de clients simultanés est donc MaxClients fois le réglage de ThreadsPerChild. désignés comme étant expérimentaux. Le MPM Event. ThreadLimit spécifie une limite supérieure qui ne peut être modifiée entre les redémarrages. Apache surveille le nombre total de threads sur tous les processus et crée ou détruit les processus en conséquence. Cela accroît considérablement l'évolutivité. Les directives StartServers et MaxClients sont identiques à celles décrites à la section "Configuration de MPM Prefork". un thread séparé gère tous les sockets d'écoute et les connexions de maintien en activité. Dans ce MPM. il peut être modifié entre chaque redémarrage. chaque processus possède plusieurs threads.208 CHAPITRE 11 Multitraitement et modules de protocole Le nombre de threads dans chaque processus est fixé. Dans le MPM Worker. Ces limites peuvent être configurées en utilisant les directives MinSpareThreads et MaxSpareThreads. présent uniquement dans Apache 2. Autres MPM --with-mpm=event --with-mpm=perchild Apache 2 comprend plusieurs MPM supplémentaires. est une variante du MPM Worker. Deux des plus intéressants sont le MPM Event et le MPM Perchild.

L'exemple montre comment utiliser SetOutputFilter pour ajouter deux filtres à tous les documents d'un répertoire particulier et AddOutputFilter pour associer des filtres à des extensions de fichier particulières. .metux. tels que SSL. Chaque filtre traite le contenu et transmet le résultat au filtre suivant. De plus. les requêtes et les réponses sont les objets transportés sur la ligne. Les filtres peuvent traiter de l'information de diverses manières. Cela peut aider à améliorer la sécurité et fournit une alternative à l'exécution d'instances de serveurs séparées. SSI et sous forme de compression. Description des filtres Apache 2 <Directory /usr/local/apache/htdocs/> SetOutputFilter INCLUDES.Description des filtres Apache 2 209 émette une nouvelle requête. Enfin.de/mpm. "Proxy Apache et mise en cache". Nombre de modules Apache sont implémentés sous forme de filtres. AddOutputFilterByType peut être utilisé pour associer des filtres à des types de fichiers spécifiques. le MPM Metux fournit une alternative au MPM Perchild.inc .PHP </Directory> AddOutputFilter INCLUDES . Les filtres correspondent à des employés . Il peut être téléchargé à l'adresse http://www . Ce MPM résout certains problèmes décrits au Chapitre 10. Le MPM Perchild permet à Apache de faire tourner différents hôtes virtuels sous divers ID utilisateurs.shtml Vous pouvez vous représenter l'architecture de filtrage dans Apache comme une ligne d'assemblage d'usine. Les filtres peuvent être automatiquement ajoutés par les modules au moment de l'exécution ou réglés dans le fichier de configuration.

qui présentent une syntaxe identique aux filtres de sortie équivalents. Apache 2. Apache 2 est bien plus qu'un simple serveur Web. En montant un serveur par-dessus Apache. comme AddOutputFilter et SetOutputFilter.210 CHAPITRE 11 Multitraitement et modules de protocole Si plusieurs directives. d'un mécanisme d'extension et de la possibilité d'utiliser de nombreux modules tiers .0. par exemple.1 et 2.2 proposent le module mod_filter qui offre une plus grande flexibilité pour définir et manipuler les chaînes de filtres. c'est une structure de serveur générique. les listes de filtres des deux directives sont fusionnées. Les filtres d'entrée peuvent être configurés par le biais des directives AddInputFilter. AddInputFilterBytype et SetInputFilter. Utilisation d'Apache comme serveur FTP Listen 10.0. un développeur bénéficie d'une infrastructure solide et portable. s'appliquent au même fichier.1:21 <VirtualHost 10.0.0.1:21> FTP On DocumentRoot /usr/local/apache/ftpdocs ErrorLog /usr/local/apache/logs/ftp_error_log <Location /> AuthName "FTP" AuthType basic AuthUserFile /usr/local/apache/conf/htusers Require valid-user </Location> </VirtualHost> Comme indiqué précédemment dans ce chapitre. en fonction de l'existence d'un en-tête HTTP particulier ou d'une variable d'environnement. Cela peut être réalisé.

Vous pouvez activer la prise en charge FTP en ajoutant simplement FTP On dans la section Virtual Host appropriée. Eudora ou Netscape Mail) de récupérer des messages à partir d'un serveur central. permettent de configurer des fonctions communes avec d'autres serveurs FTP. C'est le cas de mod_ftp. Il peut dorénavant être téléchargé à l'adresse http://incubator. Utilisation d'Apache comme serveur POP3 Listen 110 <VirtualHost *:110> POP3Protocol on POP3MailDrops /usr/local/apache/pop <Directory /usr/local/apache/pop> AuthUserFile /usr/local/apache/conf/htusers AuthName pop3 AuthType Basic Require valid-user </directory> </VirtualHost> Ce module permet à Apache 2 d'agir comme serveur POP3. . mod_ftp est en passe de devenir un projet ASF officiel. version 3) est fréquemment utilisé.apache. D'autres directives. notamment parce qu'il permet aux clients de messagerie (comme Outlook.html. POP3 (Post Office Protocol. FTPBannerMessage et FTPMaxLoginAttempts. comme FTPUmask. FTPTimeoutLogin.Utilisation d'Apache comme serveur POP3 211 créés pour Apache. A l'heure où nous écrivons ces lignes.org/ projects/mod_ftp. qui ajoute des capacités FTP à Apache. La plupart des paramètres de configuration (notamment les directives d'authentification) sont partagés avec le reste du serveur.

Cela est utile lorsque les clients se connectent à Internet par le biais de liens lents et que le contenu peut être considérablement compressé.212 CHAPITRE 11 Multitraitement et modules de protocole Sachez que ce module n'autorise pas les systèmes de lecture de courrier d'envoyer des messages. DEFLATE. comme avec les pages HTML. capable de compresser les données sortantes.(?:gif|jpe?g|png)$ no-gzip dont-vary BrowserMatch ^Mozilla/4 gzip-only-text/html #Apache 1.org/viewcvs. Vous pouvez télécharger mod_pop3 à l'adresse http://svn . mais elle présente l'avantage de réduire la quantité de données qui seront transférées vers le client. POP3MailDrops précise l'emplacement des boîtes de réception des utilisateurs. il vous faudra un serveur SMTP (Simple Mail Transfer Protocol). comme Sendmail ou PostFix.gz AddEncoding gzip . Pour cela. .apache.gz mod_gzip_item_include file \. placez une directive POP3Protocol On dans la section d'hôte virtuel appropriée.html$ Le module de filtrage mod_deflate (Apache 2) propose un filtre.cgi/httpd/mod_pop3/. La compression peut consommer beaucoup de ressources de l'unité centrale.3 mod_gzip mod_gzip_static_suffix . Compression de contenu à la volée #Apache 2 mod_deflate AddOutputFilterByType DEFLATE text/html text/plain text/xml SetEnvIfNoCase Request_URI \. Pour activer la prise en charge de POP3. L'utilisateur sous lequel Apache s'exécute doit pouvoir lire et écrire sur ces boîtes de réception.

Apache 1. capable de compresser un contenu dynamique et statique. Si un client spécifique rencontre des problèmes pour traiter un contenu compressé d'un certain type.3 propose un module équivalent. Vous le trouverez à l'adresse http://sourceforge. le client doit prendre en charge la fonctionnalité opposée : la décompression. vous pouvez paramétrer la variable d'environnement no-gzip.net/ projects/mod-gzip/. Bien entendu. Cela empêchera mod_deflate de compresser le contenu délivré au client. Cela vaut également pour les navigateurs les plus modernes. mod_gzip. comme des fichiers ZIP ou des images JPEG. ne profiteront que très peu (voire pas du tout) d'une compression supplémentaire. en utilisant les directives SetEnvIf ou BrowserMatch. comme indiqué dans l'exemple.Compression de contenu à la volée 213 D'autres contenus déjà compressés. . pour que la compression du contenu fonctionne.

.

110. 7 sous Windows 8 POP3 211 versions 4 apachetop 53 Application. 119 protéger 115 protéger pour DAV 157 refus 111 refus pour les fichiers sensibles 113 serveur 127 access_log 46 AccessFilename 99 Action 68.215 Index A AcceptFilter 179 Accès contrôler 101. 64 Allow 104. 193 Analyse du journal 53 Apache authentification 122 autres solutions 186 caractéristiques 3 enfants 205 installation 5 sous UNIX et Linux 6. 104. 109 limiter 108. 71 Activation d'un proxy 189 AddDefaultCharset 80 AddHandler 68 AddModule 18 Adresse IP autoriser l'accès 108 consigner 56 déjà utilisée 34 interdire l'accès 109 modifier 14 résoudre 56 Affectation jeux de caractères 80 langue 80 Affichage du contenu d'une requête 137 Alias 64 AliasMatch 17. 150 interdire 43. authentification 121 apxs 19 Architecture Apache 203 Archivage des journaux 55 Arguments FollowSymLinks 175 SymLinksIfOwnerMatch 175 Arrêt du serveur 12 serveur 32 Arrière-guichet CONNECT 189 FTP 189 HTTP 189 masquer 192 INDEX . 119 AllowOverride 99 Amélioration évolutivité 170 performances 170.

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. problèmes de 83 Certificat 130. certificat 137 Avertissement (accès par SSL) 146 C CA 134 Cache 185 Apache 2 198 mise en 188 mod_cache 198 proxy 197 cadaver 162 Caractères. 134 supprimer le mot de passe 134 ClearModuleList 18 Client comportant des bogues 164 préférences 77 B Bande passante restreindre 181 vol 117 bandwidth_share 182 Barre oblique finale 81 Base de données consigner dans 54 utilisateur 106 BindAddress 15 Bogues clients 164 contourner pour SSL 149 BrowserMatch 76 BufferedLogs 177 . 134 authentifier 147 auto-signé 137 créer 146 importer 147 requête de signature 135 CGI améliorer les performances 72 dépannage 72 exécutables 70 exécution 69 Charges (équilibrage) 199 Clé cryptage 132 cryptographie symétrique 132 openssl 133 paire 133 privée 132 protégée 134 publique 132. jeux de 80 Carte (cryptographie) 144 Casse. 105 Apache 2. 146 Auto-signé.216 Authentification INDEX Authentification 102.

10 fichiers multiples 11 fichiers par répertoire 98 hébergement virtuel 89. 59 INDEX D DAV 153 accès depuis Firefox 161 accès depuis la ligne de commande 162 accès depuis Office 158 accès depuis Windows 159 cadaver 162 configurer 156 contenu dynamique 165 mod_speling 165 protéger l'accès 157 sécuriser la configuration 157 sitecopy 164 DAVLockDB 168 . 110.DAVLockDB 217 Commande configure 18 killall 32 status 200 ulimit 171 Compilation (SSL) 140 Compression des données sortantes 212 Configuration désactiver les fichiers 100 fichier principal 9. 151 Contrôle accès 101. 91 hôte virtuel 92. 119. 93 minimale 140 négociation du contenu 78 sécuriser pour DAV 157 SSI 74 tester 29 WebDAV 156 configure. commande 18 CONNECT 189 Connexion démon du journal système 27 restreindre 181 serveur 41 surveiller 50 Tomcat 200 Consignation adresses IP 56 conditionnelle 49 désactiver 177 format combiné 48 format commun 47 requête 46 vers une base de données 54 Contenu configurer la négociation 177 desservi par SSL 144 dynamique et DAV 165 gestionnaire 67 négociation 77 publier 20. 150 processus externes 173 Correction URL erronée 82 Correspondance de type 79 Création base de données utilisateur 106 CA 146 certificat client 146 icône 16 Cryptage 132 Cryptographie asymétrique 132 carte 144 clé publique 132 symétrique 132 CustomLog 48. 104.

155 LogFormat 46 LogLevel 27 MaxRequestsPerChild 206 MaxSpareServers 206 MinSpareServers 206 NameVirtualHost 91 Options 114 Options +ExecCGI 70 Options +Multiviews 78 Order 104. 119 AllowOverride 99 AuthGroupFile 107 AuthName 105 AuthType 105 AuthUserFile 105 BindAddress 15 BrowserMatch 76 BufferedLogs 177 ClearModuleList 18 CustomLog 48.218 Débogage Débogage 33 hôtes virtuels 95 mod_logio 33 mod_loopback 33 mod_tee 33 mod_trace_output 33 Déchargement (SSL) 195 Décryptage 132 _default_ 93 DefaultLanguage 80 Démarrage avec SSL 141 du serveur 12 serveur 41 Démon (journal système) 27 Deny 104. 141 LoadModule 17. 71 AddDefaultCharset 80 AddHandler 68 AddModule 18 Alias 64 AliasMatch 17. 119 Dépannage 33 accès interdit 43 connexion au serveur 41 démarrage du serveur 41 document introuvable 42 erreur interne 44 scripts CGI 72 Désactivation consignation 177 exécution CGI 125 exécution SSI 125 fichiers de configuration 100 fichiers de configuration par répertoire 176 listings de répertoire 115 Descripteur de fichier 173 Digest. 120 PassEnv 75 INDEX . 111 ErrorLog 26 ExtendedStatus On 51 Group 15 Header 196 HostNameLookups 56 Include 11 KeepAliveTimeout 179 LanguagePriority 80 Listen 14. 119 DirectoryIndex 115 DirectorySlash 82 DocumentRoot 20. 20. authentification 103 Directives 11 AcceptFilter 179 AccessFilename 99 Action 68. 59 DefaultLanguage 80 Deny 104. 64 Allow 104. 89 ErrorDocument 93.

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. 111 ErrorLog 26 Event 208 INDEX . 44 journal 26 journalisation 40 liaison impossible 35 module non compatible 35 niveau 27 ouverture de fichier 36 quantité d'informations 27 redirection 40 refus d'accès 37 résolution de nom 36 error_log 46 ErrorDocument 93. 195 malformé 39 manipuler 196 proxy 196 Server 116 Entrée de journal 60 Environnement. 23 ServerName 16. variables 74 accéder à 75 paramétrer 75 spéciales 76 Equilibrage des charges 199 Erreur adresse déjà utilisée 34 de segmentation 38 de syntaxe 34 en-tête malformé 39 fin prématurée d'en-tête 39 interne 38.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. 89 E Echec de la redirection 67 En-tête fin prématurée 39 Host 90. vitesse 170 Document introuvable 42 DocumentRoot 20.

corriger 82 favicon. supprimer 125 Expression régulière 66 Expressions régulières 22 ExtendedStatus On 51 G Gestionnaire contenu 67 Graceful. 11 configuration par répertoire désactiver 176 favicon. 89 sur le nom 90. 10.ico 16.txt 60 sensibles refuser l'accès 113 vérifier les autorisations 126 Filtres 209 Firefox.pid 61 journal 46 robots. 91 Host 90 en-têtes 195 HostNameLookups 56 HostnameLookups 178 Hôte journal 59 mélanger 94 SSL 96 virtuel sur IP 93 sur le nom 92 virtuels 96 déboguer 95 SSL 144 Hotlinking 117 htaccess 98 htpasswd 106 HTTP 189 et WebDAV 154 proxy transparent 201 restreindre les méthodes 118 httpd. 60 htaccess 98 httpd.pid 61 HTTPS130 F FastCGI 73 Fautes de frappe.220 Evolutivité du système Evolutivité du système 170 Exécution désactiver CGI 125 SSI 125 restreindre de programmes 114 Exemples.ico 16. accès à DAV 161 FollowSymLinks 175 Format combiné 48 consignation 47 FTP 189 Fusion de journaux 58 INDEX . redémarrage (en douceur) 14 Group 15 H Header 196 Hébergement virtuel 87 sur IP 88. 60 Fichier améliorer les performances du système 174 configuration 9.

désactiver 115 LoadModule 17. 20. 156 sous UNIX et Linux 6. 172 Liste de contrôle de sécurité 123 Listen 14. proxy 184. 141 Listing. 188. créer 16 ImageMagick 185 Images hotlinking 117 Importation certificat 147 Include 11 Informations sécurité 123 Installation 5 mod_dav 155. 155 LogFormat 46 LogLevel 27 logresolve 57 lsof 31 J Jeux de caractères 80 Journal access_log 46 analyser 53 archiver 55 entrées communes 60 erreurs 26. 191 K KeepAliveTimeout 179 kill 32 killall 32 L LanguagePriority 80 Langue affecter 80 par défaut 80 Liaison impossible 35 Liens symboliques 175 Ligne de commande accès à DAV 162 cadaver 162 sitecopy 164 tester 30 Limiter proxy 127 refus de service 180 Limites système d'exploitation 171. 40 error_log 46 fichier 46 fusion 58 personnalisé 48 pour chaque hôte 59 quantité d'informations 27 rediriger 49 requête inhabituelle 61 rotation 55 séparation 58 surveillance en temps réel 53 système 27 INDEX .lsof 221 I Icône. 7 sous Windows 8 Inverse.

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 désactiver 18. 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. personnaliser 170 MaxRequestsPerChild 206 MaxSpareServers 206 Mécanisme d'acceptation 178 Mélange d'hôtes 94 Méthode HTTP. 140. 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. 81. 148 mod_status 51. 167 mod_security 121 mod_snmp 52 mod_speling 82. 156 mod_deflate 185. 198 mod_cgi 72 mod_choke 182 mod_dav 153 installer 155. 117. 124 effacer la liste 18 hébergement 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. 83. 138. restriction 118 MIME 68 configurer 69 MinSpareServers 206 Mise en cache 185.222 Manipulation des en-têtes M Manipulation des en-têtes 196 Mappage URL 64. 165 mod_ssl 131. 81 Masquage des serveurs d'arrière-guichet 192 Matériel. 212 mod_dir 81 mod_filter 210 mod_ftp 211 mod_include 74 mod_log_spread 177 mod_nocase 83 INDEX . 198 mod_cgi 72 mod_choke 182 mod_dav 153 mod_deflate 185.

117. 203. 138. 83. 208 basé sur les processus 204 basé sur les threads 207 Event 208 Perchild 209 Prefork 205 sélectionner 204 Worker 207 Multiview 78 O Office. accès limité 119 Négociation configurer 78 contenu 77.Performances 223 mod_perl 72 mod_proxy 197 mod_require_host 182 mod_rewrite 40. 167 mod_security 121 mod_snmp 52 mod_speling 82. 140. 133. 66 valider 84 Paire de clés 133 Paramètres HostnameLookups 178 PassEnv 75 Perchild 209 Performances améliorer 170. 135 Options 114 +ExecCGI 70 +Multiviews 78 noatime 175 Order 104. 183 Mot de passe clé 134 supprimer pour une clé 134 MPM 172. accès à DAV 158 openssl 132. 177 netstat 31 noatime 175 Nom de serveur 16 . 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. 148 mod_status 51. 165 mod_ssl 131. 193 CGI 72 RAM 170 SSL 143 système de fichiers 174 vitesse du disque 170 N NameVirtualHost 91 Navigateur. 120 Outils apachetop 53 apxs 19 ImageMagick 185 logresolve 57 lsof 31 netstat 31 openssl 132 ps 31 rotatelogs 55 vérifier le fonctionnement 31 vlogger 59 vmstat 170 Ouverture avec erreur 36 INDEX P Page par utilisateur 166 rediriger 65. 81.

personnaliser 178 Résolution adresses IP 56 de nom 36 de problèmes avec DAVLockDB 168 Ressources ( CGI exécutables) 70 Restriction bande passante 181 connexions 181 INDEX . augmenter 170 Redémarrage automatique 57 du serveur 12 en douceur (graceful) 14 Redirect 65 Redirection échec 67 erreur 40 expression régulière 66 journal 49 page 65. 151 R RAM.224 Personnalisation Personnalisation journal 48 matériel 170 refus d'accès 111 réseau 178 POP3 211 POP3Protocol On 212 Port 15 modifier 14 Pound 201 Préférences client 77 Prefork 205 Problèmes de casse 83 Processus externes contrôler 173 MPM 204 Programme. 66 RedirectMatch 66 Refus d'accès 37 personnaliser 111 de service 180 RemoveHandler 68 Répertoire fichiers de configuration 98 listings 115 Répertoire utilisateur 167 RequestHeader 197 Requête afficher le contenu 137 consignation conditionnelle 49 consigner 46 inhabituelle 61 signature 135 Require 105. 107 Réseau. 191 limiter 127 ordinaire 188. 188. 190 activer 190 Pound 201 Squid 201 URL 193 ProxyPass 191 ProxyPassReverse 192 ProxyRequests 190 ps 31 Publication contenu 20. exécution restreinte 114 Protection de l'accès DAV 157 Protocole CGI 69 DAV 153 HTTPS 130 Proxy activer 189 de cache 197 en-têtes 196 HTTP transparents 201 inverse 184.

89 Sécurisation configuration de DAV 157 serveur 114 SSL 129 Sécurité désactiver les modules 124 informations 123 liste de contrôle 123 Segmentation 38 Sélection du MPM 204 Séparation des journaux 58 ServerName 16. modifier 152 sitecopy 164 SNMP 52 Squid 201 SSI 73 configurer 74 SSL 129 améliorer les performances 143 avertissement à l'accès 146 certificat 130 compiler 140 contourner les bogues 149 contrôle d'accès complexe 150 décharger 195 desservir le contenu 144 et démarrage 141 fonctionnement 130 hôtes virtuels 96 hôtes virtuels sur le nom 144 tester les sites 148 INDEX . 23 emplacement 120 répertoires 120 VirtualHost 88. 183 Robots 183 robots. 89 ServerRoot 11 ServerTokens 116 Serveur arrêt 12 arrêter 32 configuration minimale 140 connexion 41 démarrage 12 démarrage avec SSL 141 en-tête 116 erreur interne 38 limiter l'accès 127 redémarrage 12 redémarrage automatique 57 restreindre l'envoi de contenu 114 sécurité 114 spécifier le nom 16 vérifier le fonctionnement 31 SetEnv 74 SetEnvIf 75 SetFilter 84 SetHandler 68 Signature afficher le contenu de la requête 137 requête 135 Site.SSL 225 RLimitCPU 174 RLimitMem 174 RLimitNProc 174 Robotcop 182. 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.txt 60.

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 réel 53 mod_status 51 SNMP 52 Symboliques. 126 Utilisateur autoriser 112 base de données 106 modifier 15 nombreux 108 page personnelle 166 répertoires 167 Utilitaires htpasswd 106 kill 32 stunnel 148 tail 54 traceroute (tracert) 42 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 accès 75 paramétrer 75 d'environnement spéciales 76 Versions 4 . 172 modifier les limites 172 Système de fichiers et noatime 175 Système. erreur 34 Système d'exploitation augmenter les limites 171. liens 175 SymLinksIfOwnerMatch 175 Syntaxe. 81 User 15. journal 27 traceroute (tracert) 42 TransferLog 48 Type correspondances 79 MIME 68 U ulimit 171 UnsetEnv 75 URL auto-référentielle 16 en proxy 193 mappage 64.

accès à DAV 159 Worker 207 INDEX . 93 déboguer 95 vlogger 59 vmstat 170 Vol de bande passante 117 W WebDAV 152. 153 et HTTP 154 Windows. 88 basé sur le nom 90 configurer 89.Worker 227 VirtualDocumentRootIP 97 VirtualHost 88. 89 VirtualScriptAliasIP 97 Virtuel hébergement 87. 91 modules 97 hôte 96 configurer 92.

228 Worker INDEX .

C’est l’auteur du module Apache mod_mono et de l’outil de configuration Comanche. rue des Vinaigriers 75010 Paris Tél. une société qui élabore des outils d’installation et de gestion multi-plateformes. que vous exécutiez des domaines virtuels complexes desservant des millions de pages par jour ou un simple serveur de test tournant sur un portable.fr ISBN : 978-2-7440-4001-6 . Vous y trouverez en un clin d’œil les principales commandes et lignes de code pour amener un serveur Web Apache à répondre à vos besoins. CONCIS ET MANIABLE Facile à transporter. facile à utiliser — finis les livres encombrants ! PRATIQUE ET FONCTIONNEL Plus de 100 fragments de code et commandes personnalisables pour gérer efficacement un serveur Apache dans toutes les situations.LE GUIDE DE SURVIE Apache L’ESSENTIEL DU CODE ET DES COMMANDES Ce Guide de survie est le compagnon indispensable pour ne jamais vous sentir perdu dans un environnement Apache.pearson. : 01 72 74 90 00 Fax : 01 42 05 22 17 www. en mettant l’accent sur les produits open source. Daniel Lopez est président et directeur technique de BitRock. Niveau : Intermédiaire Catégorie : Web Configuration : Multi-plateforme Pearson Education France 47 bis.