Les dossiers Open Source de la Patrick Cardona Configurer Apache mars 2007
i Ce dossier est public et libre au sens de la licence GNU-FDL : Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 1.1 ou ultérieure publiée par la Free Software Foundation. 2007 Patrick CARDONA & Mission Académique TICE de Montpellier Une copie de cette Licence GNU Free Documentation License est consultable sur le site de la Fondation GNU [1].
Sommaire Introduction iv 1 Principe de fonctionnement 1 2 Installation et configuration de base 2 2.1 Sur un système Windows........................ 2 2.1.1 Exécution du programme d installation............ 2 2.1.2 Arrêt / Démarrage du serveur................. 6 2.2 Sur un système GNU/Linux...................... 10 2.2.1 Installation............................ 10 2.2.2 Arrêt / Démarrage du serveur................. 11 2.3 Test de l installation........................... 11 3 Configuration initiale 13 3.1 Les fichiers de configuration...................... 13 3.2 Les directives............................... 13 3.3 Configuration initiale.......................... 14 4 Répertoire virtuel 15 4.1 Sur Windows............................... 15 4.2 Sur GNU/Linux ou BSD........................ 15 5 Authentification 17 5.1 Restriction d accès au répertoire ESSAI................ 17 ii
SOMMAIRE iii 5.1.1 Mise en œuvre dans un environnement Windows...... 17 5.1.2 Mise en œuvre dans un environnement GNU/Linux.... 19 6 Indexation 21 6.1 Principe.................................. 21 6.2 Combinaison de directives et d options................ 22 6.2.1 Avec l option Options None dans la directive........ 22 6.2.2 Avec l option Options Indexes dans la directive Directory 24 6.2.3 Pour masquer le répertoire parent dans la liste du contenu de répertoire (variante du 6.2.2 ci-dessus) :......... 25 6.2.4 Pour améliorer l affichage (variante du 6.2.3)........ 26 7 Journalisation 27 7.1 Directives et formats de journalisation................ 27 7.2 Rotation quotidienne des journaux.................. 28 7.3 Outils de statistiques.......................... 28 8 Gestion des pages dynamiques 29 8.1 Interpréteur Perl et scripts CGI.................... 29 8.1.1 Installation de Perl sous Windows............... 29 8.1.2 CGI Perl sur un serveur GNU/Linux............. 34 8.2 Interpréteur PHP............................. 37 8.2.1 PHP................................ 37 8.2.2 Installation de PHP sur un système Microsoft Windows.. 37 8.2.3 Installation de PHP sur un système GNU/Linux....... 45 A Les messages d erreur 46 B Sources des scripts 47 B.1 CGI Perl.................................. 47 C Colophon 49
Introduction Ce petit manuel se propose de rappeler à travers quelques exemples simples les principaux aspects de la configuration d un serveur Web Apache [10] : installation et configuration de base, notion de Directive, création d un répertoire virtuel, authentification, indexation et journalisation, ainsi que pages dynamiques au moyen de scripts Perl [9] ou PHP [17]. Le serveur Web Apache est un logiciel Open source [6] et multiplate-forme : on peut l installer aussi bien sur un hôte GNU/Linux [21], FreeBSD [16] ou un serveur Microsoft Windows [8] 2003. La configuration sera identique, à l exception de certains fichiers parfois répartis en deux ou trois fichiers complémentaires ou la notation des chemins de répertoires, qui seront spécifiques à chaque système (Type MS-DOS ou UNIX). iv
Chapitre 1 Principe de fonctionnement Un serveur Web communique avec un client (navigateur tel que Microsoft Internet Explorer [18], Firefox [12] ou Camino [20]) au moyen du protocole HTTP [5]. On peut résumer ainsi le dialogue : 1. Le client demande un fichier (ou une liste de répertoire, voir indexation, chapitre 6.2.4 page 27) au moyen d une URL. C est une requête de la forme : http://serveur:port/dossier/fichier Par exemple : http://pedagogie.ac-montpellier.fr:8080/technologie/modele.zip 2. Le serveur examine les points suivants : (a) le fichier demandé existe, sinon il renvoie un message d erreur A. (b) il existe une restriction d accès : dans ce cas le serveur demande préalablement un identifiant (login) et un mot de passe, et gère les éventuelles erreurs A ; sinon le fichier demandé est envoyé au navigateur qui le traite en fonction de son type (affichage, ouverture au moyen d un programme incorporé (plugin) ou extérieur, enregistrement sur le disque, etc.) (c) le navigateur met fin à la requête. Parfois, la connexion est rompue par le serveur si le délai de connexion prévu a été dépassé. Certains noms de fichiers sont des scripts (extension.php ou.pl, par exemple) et sont préalablement interprétés sur le serveur par un interpréteur PHP [17] ou Perl [9] avant de renvoyer un flux de texte qui résulte de ce traitement. C est la notion de page dynamique, chapitre 8 page 29. Ces scripts peuvent servir d interface à des bases de données comme MySQL [19]. 1
Chapitre 2 Installation et configuration de base Lors de l installation d Apache, veillez à respecter les caractéristiques suivantes : Le serveur Apache doit être installé en tant que service ; Si vous faites cohabiter ce serveur avec un autre serveur Web qui écoute par défaut sur le port 80, le serveur Apache doit alors écouter les requêtes HTTP [5] sur un autre port, conventionnellement le port 8080. 2.1 Sur un système Windows Dans ce qui suit, on choisit comme emplacement du dossier d installation : C:\Apache. Sinon, tenez-en compte dans les paramètres à adapter le cas échéant. 2.1.1 Exécution du programme d installation On installe la version 2.2.4 sur un serveur Windows [8] 2003 à partir du fichier MSI suivant : apache_2.2.4-win32-x86-no_ssl.msi 1. Clic-droit sur apache_2.2.4-win32-x86-no_ssl.msi Dans le menu contextuel, choisissez Installer. 2. Le dialogue de certificat (figure 2.1) s affiche : ne tenez pas compte du message alarmant. Apache n est pas un produit Microsoft, voilà tout... Cliquez sur Exécuter. 3. Le dialogue de l Assistant (angl. wizard) d installation s affiche (figure 2.2) : bouton Next 2
CHAPITRE 2. INSTALLATION ET CONFIGURATION DE BASE 3 FIG. 2.1 Certificat d installation FIG. 2.2 Assistant d installation
CHAPITRE 2. INSTALLATION ET CONFIGURATION DE BASE 4 FIG. 2.3 Licence 4. Le dialogue relatif à la Licence s affiche (figure 2.3) : sélectionnez l option I accept the terms..., puis cliquez sur Next. 5. Le dialogue Read this first s affiche (figure 2.4) : cliquez sur Next. 6. Le dialogue Server Information s affiche (figure 2.5) : Renseignez les champs demandés : Network Domain : nom de domaine, par exemple : ac-montpellier.fr Server Name : nom qualifié du serveur, par exemple : monserveur.ac-montpellier.fr Administrator s Email address : courriel du webmestre, par exemple : webmestre@ac-montpellier.fr Choisissez l option For all users, on Port 80, as a service... Autrement dit : le serveur Apache fonctionnera en tant que service, indépendamment des sessions locales des utilisateurs connectés au serveur. N.B. : Ne vous inquiétez pas du port 80 qui sera effectivement modifié a posteriori. Cliquez sur Next. 7. Le dialogue Setup Type s affiche (figure 2.6). Conservez l option Typical puis cliquez sur Next. 8. Le dialogue Destination Folder s affiche (figure 2.7) : cliquez sur Change, puis sur l icône Create new folder : créez un dossier Apache à la ra-
CHAPITRE 2. INSTALLATION ET CONFIGURATION DE BASE 5 FIG. 2.4 À lire (en anglais...) FIG. 2.5 Configuration de base
CHAPITRE 2. INSTALLATION ET CONFIGURATION DE BASE 6 FIG. 2.6 Type d installation cine du lecteur C: C:\Apache 9. Le dialogue Ready to Install... s affiche (figure 2.8) : cliquez sur Install. 10. Enfin le dialogue Installation Wizard completed (figure ) succède à une boîte de progression (qui s est affichée quelques secondes seulement) : cliquez sur Finish 2.1.2 Arrêt / Démarrage du serveur 2.1.2.1 Méthode graphique Vous remarquerez dans la zone de notification, à côté de l horloge, une icône dont l apparence indique l état du serveur : démarré ou arrêté :. En cliquant sur cette icône, il est possible d afficher un menu permettant l arrêt ou le (re)démarrage du serveur (figure 2.10)
CHAPITRE 2. INSTALLATION ET CONFIGURATION DE BASE 7 FIG. 2.7 Répertoire de destination FIG. 2.8 Prêt pour l installation
CHAPITRE 2. INSTALLATION ET CONFIGURATION DE BASE 8 FIG. 2.9 Fin de l installation FIG. 2.10 Menu arrêt / (re)démarrage du serveur
CHAPITRE 2. INSTALLATION ET CONFIGURATION DE BASE 9 FIG. 2.11 Arrêt / (re)démarrage du serveur dans une invite de commande CMD 2.1.2.2 Dans une invite de commande Ouvrez une invite de commande CMD (figure 2.11). Recherche du service : net start find "Apache" renvoie le nom du service : Apache2 Arrêt du service : Démarrage du service : net stop Apache2 net start Apache2 N.B. : Il n existe pas de commande restart en ligne de commande : on est obligé de procéder en deux temps : net stop puis net start.
CHAPITRE 2. INSTALLATION ET CONFIGURATION DE BASE 10 2.2 Sur un système GNU/Linux Nous prenons l exemple d un système fondé sur Debian : Ubuntu [11]. 2.2.1 Installation 1. Ouvrez une console ou une émulation de terminal (Xterm). 2. Installez Apache2 au moyen de l outil apt-get : sudo apt-get install apache2 Lecture des listes de paquets... Fait Construction de l arbre des dépendances Lecture de l information d état... Fait Les paquets supplémentaires suivants seront installés : apache2-common apache2-mpm-worker apache2-utils libapr0 Paquets suggérés : apache2-doc Les NOUVEAUX paquets suivants seront installés : apache2 apache2-common apache2-mpm-worker apache2-utils libapr0 0 mis à jour, 5 nouvellement installés, 0 à enlever et 4 non mis à jour. Il est nécessaire de prendre 1282ko dans les archives. Après dépaquetage, 4325ko d espace disque supplémentaires seront utilisés. Souhaitez-vous continuer [O/n]? 3. Aceptez en saisisant <O> puis Entrée (...) Dépaquetage de apache2 (à partir de.../apache2_2.0.55-4ubuntu4_i386.deb)... Paramétrage de libapr0 (2.0.55-4ubuntu4)... Paramétrage de apache2-utils (2.0.55-4ubuntu4)... Paramétrage de apache2-common (2.0.55-4ubuntu4)... Setting Apache2 to Listen on port 80. If this is not desired, please edit /etc/apache2/ports.conf as desired. Note that the Port directive no longer works. Module userdir installed; run /etc/init.d/apache2 force-reload to enable. Paramétrage de apache2-mpm-worker (2.0.55-4ubuntu4)... * Starting apache 2.0 web server... apache2: Could not determine the server s fully
CHAPITRE 2. INSTALLATION ET CONFIGURATION DE BASE 11 qualified domain name, using 127.0.0.1 for ServerName [ ok ] Et hop! c est déjà fini...le serveur est démarré. Qui a dit que GNU/Linux [21] était compliqué? 2.2.2 Arrêt / Démarrage du serveur Dans une console ou un terminal émulé : Arrêt du serveur sudo /etc/init.d/apache2 stop Password: * Stopping apache 2.0 web server... Démarrage du serveur sudo /etc/init.d/apache2 start Password: * Starting apache 2.0 web server... [ ok ] Redémarrage du serveur sudo /etc/init.d/apache2 restart Password: * Forcing reload of apache 2.0 web server... [ ok ] 2.3 Test de l installation Une fois le service démarré, ouvrez dans votre navigateur l URL : http://localhost:80/ ou http://localhost:8080/ en fonction du port choisi. Selon les environnements, vous obtiendrez une page laconique It works! sur Windows [8] ou un listage de la racine sur Ubuntu [11], par exemple (figure 2.12).
CHAPITRE 2. INSTALLATION ET CONFIGURATION DE BASE 12 FIG. 2.12 Test de l installation
Chapitre 3 Configuration initiale 3.1 Les fichiers de configuration Apache utilise essentiellement deux sortes de fichiers de configuration : Le fichier de configuration générale, httpd.conf, placé dans C:\Apache\conf (Windows [8]) ou apache2.conf placé dans /etc/apache2 et associé à d autres fichiers (ports.conf et sites-available/default) sur les systèmes GNU/Linux [21] ou BSD [16]. Un fichier secondaire et facultatif, appelé.htaccess, que l on copie dans certains répertoires. Nous en verrons un exemple dans le chapitre 5.1.2, page 21. 3.2 Les directives Le fichier principal httpd.conf ou apache2.conf se compose de lignes simples sous la forme Clef Valeur, comme celles-ci : ServerRoot "C:/Apache" Listen 8080 Ou bien de sections appelées Directives, constituées d une balise ouvrante <Balise>, d une série de paires Option Valeur regroupées, et pour clore le tout, d une balise fermante </Balise>, ce qui ressemble à ceci : <Balise> Option Valeur Option Valeur (...) </Balise> 13
CHAPITRE 3. CONFIGURATION INITIALE 14 Par exemple, voici la directive du répertoire des scripts CGI : <Directory "C:/Apache/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> Un commentaire est précédé du signe dièse # 3.3 Configuration initiale Voici les Options à adapter ou à vérifier : 1. Racine du serveur (dossier d installation) # Sur Windows : ServerRoot "C:/Apache" # ou bien sur GNU/Linux ou BSD : ServerRoot "/usr/var/apache2" 2. Le port sur lequel écoute le serveur Apache : option Listen. Pour écouter sur le port 8080, on écrit dans httpd.conf (sur Windows) ou bien dans /etc/apache2/ports.conf sur GNU/Linux ou BSD : Listen 8080 3. La racine des documents servis par le serveur Web se trouve indiquée soit dans httpd.conf (sur Windows), soit dans /etc/apache2/sites-available/de sur GNU/Linux ou BSD # Sur Windows DocumentRoot "C:/Apache/htdocs" # Sur GNU/Linux ou BSD DocumentRoot /var/www Pour prendre en compte un changement d option, il faut redémarrer le serveur Apache.
Chapitre 4 Répertoire virtuel 4.1 Sur Windows Pour créer un Alias ESSAI pointant vers le dossier D:\essai_Apache : 1. Créez préalablement le répertoire D:\essai_Apache 2. Editez le fichier httpd.conf et ajoutez-y la directive suivante, à l intérieur de la directive <IfModule alias_module>...</ifmodule> 1 : Alias /ESSAI/ D:/essai_apache/ <Directory "D:/essai_apache"> AllowOverride AuthConfig Options Indexes IndexOptions FancyIndexing IndexIgnore.. Order allow,deny Allow from all </Directory> 3. On redémarre le serveur Apache... Les différentes options seront expliquées dans les chapitres suivants (authentification et indexation). 4.2 Sur GNU/Linux ou BSD 1. On crée le dossier /home/essai_apache 2. Dans /etc/apache2/sites-enabled/ on ajoute la directive : Alias /ESSAI/ "/home/essai_apache/" 1 Cette directive remplace l ancienne directive IfModule mod alias.c 15
CHAPITRE 4. RÉPERTOIRE VIRTUEL 16 FIG. 4.1 Requête sur l Alias ESSAI <Directory "/home/essai_apache/"> Options Indexes MultiViews FollowSymLinks #AllowOverride None AllowOverride AuthConfig Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> 3. On redémarre le serveur Apache... Et voilà...(figure 4.1)
Chapitre 5 Authentification 5.1 Restriction d accès au répertoire ESSAI Pour mettre en œuvre ce contrôle d accès, nous utilisons un fichier.htaccess pour restreindre cet accès à un utilisateur autorisé : matice. Avant de suivre les étapes suivantes, assurez-vous d avoir créé un répertoire virtuel ESSAI comme indiqué dans le chapitre 4 et d avoir remplacé l option : AllowOverride None par AllowOverride AuthConfig 5.1.1 Mise en œuvre dans un environnement Windows 1. D abord, le fichier des mots de passe : créez un dossier C:\Apache\etc, 2. Copiez-y l utilitaire C:\Apache\bin\htpasswd.exe, 3. Ouvrez une invite de commande CMD, 4. Déplacez-vous dans le dossier C:\Apache\etc : CD \ CD Apache\etc 5. Exécutez-y la commande suivante : htpasswd.exe -bc.htpasswd matice motdepasse En y remplaçant motdepasse, bien évidemment. Notez précieusement ce mot de passe afin de le diffuser aux personnes autorisées. Il convient de garder le nom de fichier.htpasswd car le serveur Apache interdit par défaut l affichage de ce fichier par un utilisateur distant. Le contenu du fichier.htpasswd ressemble à ceci : matice:motdepassecrypté 17
CHAPITRE 5. AUTHENTIFICATION 18 FIG. 5.1 Authentification requise pour accéder à ESSAI 6. Maintenant que le fichier de mots de passe est créé, nous pouvons appliquer la restriction d accès au moyen d un fichier.htaccess : déplacezvous dans D:\essai_Apache. D: CD \essai_apache 7. Créez-y un fichier htaccess.txt : Notepad htaccess.txt 8. Et saisissez-y ceci : Authname "ESSAI" AuthUserFile C:/Apache/etc/.htpasswd AuthType Basic require valid-user 9. Enregistrez le fichier et renommez le ainsi : MOVE htaccess.txt.htaccess 10. Testez la connexion : dans un navigateur, saisissez l URL : http://localhost:8080/essai/ Vous devez voir apparaître l invite d authentification comme sur la figure 5.1.
CHAPITRE 5. AUTHENTIFICATION 19 5.1.2 Mise en œuvre dans un environnement GNU/Linux Pour mettre en œuvre cette authentification, il faut d abord créer un fichier de mots de passe. Par défaut, l outil de création du fichier de mots de passe fourni par apache, htpasswd, utilise l algorithme MD5. 1. Création du fichier des mots de passe. Dans une console ou un terminal émulé, déplacez-vous dans le répertoire : /etc/apache2 cd /etc/apache2 2. Puis saisissez la commande : sudo htpasswd -bc.htpasswd matice motdepasse Ce qui crée le fichier concerné et y ajoute l utilisateur matice avec le mot motdepasse. Adding password for user matice N.B. : Si vous omettez le mot de passe dans la commande précédente (option -c au lieu de -bc), une invite vous demande de saisir ce mot de passe sans écho à l écran, sécurité oblige! Notez précieusement ce mot de passe afin de le diffuser aux personnes autorisées. Il convient de garder le nom de fichier.htpasswd car le serveur Apache interdit par défaut l affichage de ce fichier par un utilisateur distant. Le contenu du fichier.htpasswd ressemble à ceci : matice:motdepassecrypté 3. Maintenant que le fichier de mots de passe est créé, nous pouvons appliquer la restriction d accès au moyen d un fichier.htaccess : déplacezvous dans /home/essai Apache. cd /home/essai_apache 4. Créez-y un fichier.htaccess : touch.htaccess 5. Éditez-le dans votre éditeur préféré 1 : sudo vi.htaccess et saisissez-y ceci : Authname "ESSAI" AuthUserFile /etc/apache2/.htpasswd AuthType Basic require valid-user 6. Enregistrez le fichier. 7. Testez la connexion : dans un navigateur, saisissez l URL : http://localhost/essai/ Vous devez voir apparaître l invite d authentification comme sur la figure 5.2. 1 vi, nano...
CHAPITRE 5. AUTHENTIFICATION 20 FIG. 5.2 Authentification requise pour accéder à ESSAI : serveur GNU/Linux, client Firefox
Chapitre 6 Indexation 6.1 Principe Voici en quelques mots comment personnaliser la gestion de l indexation avec un serveur Web Apache. On travaille avec un alias de référence : ESSAI, ce qui correspond aux directives suivantes dans httpd.conf : Alias /ESSAI/ D:/essai_apache/ <Directory "D:/essai_apache"> AllowOverride None Options None Order allow,deny Allow from all </Directory> Et la directive commune : <IfModule dir_module> DirectoryIndex index.html </IfModule> qui désigne le fichier index.html comme index par défaut si l URL est un répertoire. On peut aussi ajouter d autres fichiers dans cette liste, par ordre de priorité, séparé par un espace ; par exemple : <IfModule dir_module> DirectoryIndex index.html index.htm index.php index.pl </IfModule> 21
CHAPITRE 6. INDEXATION 22 FIG. 6.1 Par défaut, erreur d accès 403 6.2 Combinaison de directives et d options 6.2.1 Avec l option Options None dans la directive <Directory "D:/essai_apache"> (...) Options None (...) </Directory> La demande de l URL : http://localhost:8080/essai/ provoque un refus d accès si aucun fichier index.html n est présent : erreur 403 (figure 6.1). On peut aussi, dans l option DirectoryIndex, indiquer un chemin absolu vers un fichier d erreur plus explicite si aucun des fichiers envisagés n est d abord trouvé : <IfModule dir_module> DirectoryIndex index.html /ESSAI/erreur.txt </IfModule> Ce qui donne alors le message de la figure 6.2.
CHAPITRE 6. INDEXATION 23 FIG. 6.2 Message d erreur personnalisé
CHAPITRE 6. INDEXATION 24 FIG. 6.3 Indexation avec l option Option Indexes 6.2.2 Avec l option Options Indexes dans la directive Directory <Directory "D:/essai_apache"> (...) Options Indexes (...) </Directory> et l absence de fichier d erreur personnalisé : <IfModule dir_module> DirectoryIndex index.html index.htm index.php </IfModule> la demande de l URL : http://localhost:8080/essai/ provoque l affichage du contenu du répertoire si aucun fichier index.html n est présent (figure 6.3) :
CHAPITRE 6. INDEXATION 25 FIG. 6.4 Indexation avec l option IndexIgnore.. 6.2.3 Pour masquer le répertoire parent dans la liste du contenu de répertoire (variante du 6.2.2 ci-dessus) : On ajoute l option IndexIgnore suivie du nom du répertoire parent.. : <Directory "D:/essai_apache"> (...) Options Indexes IndexIgnore.. </Directory> Ce qui donne la figure 6.4.
CHAPITRE 6. INDEXATION 26 FIG. 6.5 Indexation avec l option FancyIndexing 6.2.4 Pour améliorer l affichage (variante du 6.2.3) On ajoute l option IndexOptions FancyIndexing <Directory "D:/essai_apache"> (...) Options Indexes IndexOptions FancyIndexing IndexIgnore.. (...) </Directory> Ce qui donne la figure 6.5.
Chapitre 7 Journalisation 7.1 Directives et formats de journalisation Sous Linux, l emplacement du journal des erreurs est indiqué dans /etc/apache2/apac par la directive ErrorLog : ErrorLog /var/log/apache2/error.log Les autres paramètres de journalisation sont indiqués dans chaque fichier de configuration lié à un site dans le répertoire /etc/apache2/sites-available : Le niveau d alerte est défini par la directive LogLevel dans le fichier de configuration default. Par exemple : LogLevel warn Les valeurs possibles sont, du plus bénin au plus grave : debug, info, notice, warn, error, crit. L emplacement du journal de connexion est indiqué par la directive CustomLog : CustomLog /var/log/apache2/access.log combined Par défaut, Apache propose quatre formats de journaux, décrits dans la directive LogFormat du fichier apache2.conf. Les voici du plus complexe au plus simple : combined, common, referer, agent. Voici, par exemple, la définition de common : LogFormat "%h %l %u %t \"%r\" %>s %b" common 27
CHAPITRE 7. JOURNALISATION 28 7.2 Rotation quotidienne des journaux Par défaut, Apache crée un journal acces.log dont la taille peut atteindre 5 Go! Il convient de découper automatiquement ce journal. L outil fourni avec Apache, logrotate.exe dans le cas de Windows, ou logrotate sous GNU/Linux, ne convient pas car il produit des journaux incrémentés de la forme access i.log où i prend à chaque rotation la valeur i + 1. Cette convention de nommage ne permet pas une recherche par date. Nous conseillons d utiliser un outil tiers appelé cronolog [13]. Prenons le cas d un d un journal Apache sous Windows : 1. Téléchargez l archive : win32 version (ZIP file), [14], 2. Décompressez-la, 3. Copiez l exécutable cronolog.exe 4. Créez un dossier C:\cronolog, 5. Collez-y l exécutable, 6. Éditez le fichier de configuration d Apache ainsi : Notepad C:\Apache\conf\httpd.conf 7. Repérez la section : <IfModule log_config_module> 8. Puis modifiez ainsi la directive CustomLog : CustomLog " C:/cronolog/cronolog.exe logs/access-%y%m%d.log" common 9. Redémarrez le serveur apache. 10. Vérifiez dans C:\Apache\logs la prise en compte du nouveau format. 7.3 Outils de statistiques Il existe des outils de statistiques dédiés à l analyse des serveurs Web. Voyez notre dossier consacré à awstats [23].
Chapitre 8 Gestion des pages dynamiques 8.1 Interpréteur Perl et scripts CGI 8.1.1 Installation de Perl sous Windows 1. On se procure la distribution Perl de l éditeur Activestate, ActivePerl. Dans notre cas, la version est : ActivePerl 5.8.8 Build 819. (a) Exécution de l Assistant d installation (figure 8.1). (b) Dans le dialogue suivant, sélectionnez l option I accept the terms..., puis cliquez sur Next (figure 8.2). (c) Dans le dialogue suivant, sélectionnez les éléments indiqués, sans installer la documentation ni les exemples, puis cliquez sur Next (figure 8.3). (d) Dans le dialogue suivant, décochez la dernière option Create virtual IIS directory..., puis cliquez sur Next (figure 8.4). Dans le dialogue suivant, lancez l installation en cliquant sur Install (figure 8.5). (e) Refermez l assistant en cliquant sur Finish dans le dialogue suivant (figure 8.6). 29
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 30 FIG. 8.1 Installation de Perl (1) FIG. 8.2 Installation de Perl (2)
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 31 FIG. 8.3 Installation de Perl (3) FIG. 8.4 Installation de Perl (4)
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 32 FIG. 8.5 Installation de Perl (5) FIG. 8.6 Installation de Perl (6)
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 33 FIG. 8.7 Installation de Perl (7) 2. Maintenant que Perl est installé, il faut configurer Apache pour les scripts Perl-CGI. Dans notre exemple, l interpréteur perl est dans C:\Perl\bin\ (a) Si on essaie tout de suite d invoquer une URL avec un fichier.pl, celui-ci ne sera pas correctement interprété (figure 8.7). Pour éviter ce type d erreur, il faut respecter trois principes : Tout script Perl doit commencer par une incantation, cette première ligne, non indentée débutant par #! et contenant le chemin de l exécutable perl.exe ; dans notre cas : #!c:/perl/bin/perl.exe -w Il faut aussi placer les scripts dans un répertoire déclaré par la directive ScriptAlias, par exemple : ScriptAlias /cgi-bin/ "D:/cgi-bin/" Il faut indiquer enfin la directive Directory correspondante, placée en dehors de la section <IfModule alias_module> Par exemple : <Directory "D:/cgi-bin/"> AllowOverride None Options None Order allow,deny Allow from all </Directory> (b) Une fois ces modifications effectuées, un redémarrage du serveur Apache sera nécessaire. (c) L URL appelée sera : http://localhost:8080/cgi-bin/monscript.pl?clef=essai On voit sur la capture d écran (figure ) que le paramètre Toutes a été récupéré par la script au moment de son interprétation.
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 34 FIG. 8.8 Exécution correcte du script CGI-Perl Il ne faut pas placer le dossier cgi-bin sous un dossier déjà associé à un alias existant. Par exemple, D:\essai_apache\cgi-bin\ avec l URL http://localhost: 8080/ESSAI/cgi-bin/monscript.pl ne fonctionnera pas, car ESSAI est un alias, et provoquera une erreur. 8.1.2 CGI Perl sur un serveur GNU/Linux Par défaut, toutes les distributions GNU/Linux ont une version de Perl installée. Nous donnons ici l exemple d une distribution de type Debian : Ubuntu. Pour connaître la version installée sur un système de type Debian/Ubuntu, exécutez la commande : dpkg -l perl Ce qui renvoie dans mon cas : ii perl 5.8.8-6... Pour déterminer le chemin de l exécutable perl, on exécute la commande suivante : whereis perl Ce qui dans mon cas renvoie :
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 35 perl: /usr/bin/perl /etc/perl /usr/lib/perl /usr/x11r6/bin/perl L incantation à placer au début des scripts Perl sera donc : #!/usr/bin/perl -w Il faut aussi installer le module mod perl [22] d Apache : sudo apt-get install libapache2-mod-perl2 Pour vérifier que ce module est bien activé : sudo a2enmod perl This module is already enabled! Pour tester le script monscript.pl, dont l incantation a été adaptée à notre environnement GNU/Linux (voir ci-dessus, chemin de l interpréteur perl) nous le copions dans : /usr/lib/cgi-bin/ : sudo cp monscript.pl /usr/lib/cgi-bin/ Password: Ce chemin des CGI est conforme à la directive ScriptAlias dans : /etc/apache2/available_sites/default Celle-ci a été adaptée ainsi afin de prendre mod perl comme interpréteur de scripts Perl dans Apache2 : ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> Le serveur Apache2 ayant été redémarré : sudo /etc/init.d/apache2 reload Ainsi l URL http://localhost/cgi-bin/monscript.pl affiche la page dynamique...(figure 8.9). Le source de la version GNU/Linux de monscript.pl est disponible dans l annexe.
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 36 FIG. 8.9 Cgi Perl sous GNU/Linux
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 37 FIG. 8.10 Installation de PHP pour Apache (1) 8.2 Interpréteur PHP 8.2.1 PHP PHP [17] est un langage de script qui permet l écriture de pages dynamiques. Une section de script PHP se caractérise par les balises : <?php instruction ;?> 8.2.2 Installation de PHP sur un système Microsoft Windows 1. Procurez-vous le programme d installation de PHP pour Windows. Dans notre exemple, nous avons utilisé le site de téléchargement de PHP : http://fr2.php.net/downloads.php Version : 5.2.1 Installateur : php-5.2.1-win32-installer.msi 2. Exécutez php-5.2.1-win32-installer.msi En voici les étapes : (a) Certificat de l éditeur : passez outre la mise en garde... en cliquant sur Exécuter (figure 8.10). (b) L assistant d installation de PHP s affiche. Cliquez sur Next (figure 8.11). (c) S affiche le dialogue relatif à la licence : cochez l option I accept the terms.... Puis cliquez sur Next (figure 8.12). (d) Dans le dialogue suivant, indiquez le dossier de destination. Dans notre exemple, C:\php\ (figure 8.13).
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 38 FIG. 8.11 Installation de PHP pour Apache (2) FIG. 8.12 Installation de PHP pour Apache (3)
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 39 FIG. 8.13 Installation de PHP pour Apache (4) (e) Dans le dialogue suivant, indiquez le serveur Web à configurer pour interpréter les scripts PHP : dans notre cas, il s agit d une version 2.2.4 d Apache, donc nous cochons l option Apache 2.2.x Module. Puis cliquez sur Next (figure 8.14). (f) Dans le dialogue suivant, indiquez le chemin du dossier de configuration d Apache (où se trouve notamment, httpd.conf) : dans notre exemple, C:\Apache\conf\. Puis cliquez sur Next (figure 8.15). (g) Dans le dialogue suivant, développez l arborescence des extensions et sélectionnez l extension MySQL afin de supporter des applications PHP-MySQL 1. Puis cliquez sur Next (figure 8.16). (h) L Assistant est prêt pour l installation. Cliquez sur install (figure 8.17). (i) L assistant vous propose de modifier la configuration d Apache. Acceptez (figure 8.18). En fait, les lignes suivantes seront ajoutées dans httpd.conf : #BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL PHPIniDir "C:\\PHP\\" LoadModule php5_module "C:\\PHP\\php5apache2_2.dll" #END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL Puis celles-ci dans mime.types : application/x-httpd-php php application/x-httpd-php-source phps (j) Cliquez sur Finish pour mettre fin à l assistant (8.19). 1 MySQL est un serveur de bases de données SQL. Nous n aborderons pas son installation ici qui dépasserait notre propos.
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 40 FIG. 8.14 Installation de PHP pour Apache (5) FIG. 8.15 Installation de PHP pour Apache (6)
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 41 FIG. 8.16 Installation de PHP pour Apache (7-8)
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 42 FIG. 8.17 Installation de PHP pour Apache (9) (k) Redémarrez le serveur Apache. Si vous oubliez de le redémarrer, vous obtiendrez l erreur de la figure 8.20 : le script est affiché sans être interprété préalablement sur le serveur. En revanche, après redémarrage du serveur Apache, l instruction suivante dans le script info.php affichera la page d information sur PHP dans votre navigateur (figure 8.21) à l URL : http://localhost:8080/essai/info.php <?php phpinfo();?>
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 43 FIG. 8.18 Installation de PHP pour Apache (10-12)
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 44 FIG. 8.19 Installation de PHP pour Apache (13) FIG. 8.20 Installation de PHP pour Apache (14) FIG. 8.21 Installation de PHP pour Apache (15)
CHAPITRE 8. GESTION DES PAGES DYNAMIQUES 45 FIG. 8.22 Configuration de PHP sous GNU/Linux affichée par info.php 8.2.3 Installation de PHP sur un système GNU/Linux Exemple sur une distribution de type Debian : Ubuntu. Dans une console ou un terminal émulé, procédez ainsi : 1. Installez le paquet générique php5 : sudo apt-get install php5 2. Pour tester l installation, copiez le fichier info.php suivant dans /var/www : <?php infophp();?> 3. Ouvrez l URL suivante dans votre navigateur : http://localhost/info.php Vous obtiendrez l affichage de la configuration (figure 8.22).
Annexe A Les messages d erreur Voici les erreurs les plus fréquemment retournées au client par le serveur Apache. Une bonne compréhension de ces erreurs constitue un bon outil de diagnostic. Code retourné Mots clés Explication 401 UNAUTHORIZED Droits d exécution insuffisant (1) 403 FORBIDDEN Accès interdit (2) 404 NOT FOUND Fichier introuvable 405 METHOD NOT ALLOWED Méthode non autorisée 408 REQUEST TIME OUT Délai de connexion dépassé. 500 INTERNAL SERVER ERROR Erreur serveur interne (3) (1) Il s agit le plus souvent d un droit insuffisant sur un script : ajouter un droit d exécution (chmod a+x) résout généralement le problème. (2) Il s agit d un échec de l authentification Apache lors de la saisie du login ou du mot de passe. (3) Une erreur interne est souvent due à une erreur de syntaxe dans un script. 46
Annexe B Sources des scripts B.1 CGI Perl Voici la version de monscript.pl adaptée à GNU/Linux. Il a été notamment nécessaire de gérer le problème des en-têtes renvoyés par Apache2 en ajoutant la section : use Apache2::RequestRec (); my $r = shift; $r->content_type( text/html ); afin de gérer l écriture différée des sections du type : print<<fin; Voici le script complet : #!/usr/bin/perl -w use Apache2::RequestRec (); my $r = shift; $r->content_type( text/html ); ### CGI avec Mod_perl sous Linux ### (c)2007 Patrick CARDONA - MATICE de Montpellier.fr ### Licence GNU-GPL ### monscript.pl ### use strict; use CGI; my $cgi = new CGI; use CGI::Carp qw(fatalstobrowser); 47
ANNEXE B. SOURCES DES SCRIPTS 48 print <<FIN; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> Exemple de script CGI Perl </title> <STYLE TYPE=text/css> body { font-family:verdana,arial,sans ; font-size:10pt ; color:blue } h1 { color:#3366ff ; font-size:12pt } a:link,a:visited { text-decoration:none ; color:#3366ff } </STYLE> </head> <body topmargin="70"> <h1>exemple de script Perl CGI</h1> <HR> <p> FIN print "<P>Variable passée au script : " ; print $cgi->param( clef ); print <<PIED; <P> <P> <p> <HR> <p><span STYLE=\"font-size:8pt\"> 2006-2007 MATICE de Montpellier <a href=\"mailto:tice\@ac-montpellier.fr\">courriel<a/> </SPAN></p> </body> </html> PIED
Annexe C Colophon Ce manuel a été réalisé au moyen du langage de mise en page L A TEX [24], dans sa distribution TEXLive [25] sur un système GNU/Linux, à savoir Ubuntu. Les textes ont été édités dans l éditeur TeXmaker [26] et compilés au moyen de la commande pdflatex. Illustrations : les captures d écran ont été réalisées sur le système Microsoft Windows 2003 d un ordinateur portable prêté par la MATICE de Montpellier, enregistrées au format PNG et retouchées au moyen de ImageMagick [27] ou Gthumb [28]. Les logos GNU-FDL et Open Source sont les logos respectifs de ces fondations. Le dessin de la couverture provient de la collection de L US National Oceanic and Atmospheric Administration. C est une image libre de droits, référencée ici : http://gimp-savvy.com/. 49
Bibliographie [1] Licence GNU-FDL http://www.gnu.org/copyleft/fdl.html angl. [2] Licence Générale Publique GNU http://fsffrance.org/gpl/gpl-fr.fr. html [3] Apache France, http://www.apachefrance.com/ [4] BEN LAURIE ET PETER LAURIE, Apache, installation et mise en œuvre, éd. O Reilly, 2 nde édition, mars 2000. [5] RFC 1945, HTTP 1.0 http://abcdrfc.free.fr/rfc-vf/rfc1945.html [6] Patrick Cardona, Introduction aux logiciels libres http://pedagogie.ac-montpellier.fr/tice/ll_matice/introduction. html [7] MATICE de Montpellier http://pedagogie.ac-montpellier.fr/tice/ [8] Site officiel de Microsoft, Windows http://www.microsoft.com/france/windows/ [9] Le langage Perl http://fr.wikipedia.org/wiki/perl_%28langage%29 [10] Wikipédia, Article Apache HTTP Server http://fr.wikipedia.org/wiki/apache_http_server [11] Ubuntu http://www.ubuntu-fr.org/ [12] Fondation Mozilla, Firefox http://firefox.fr/ [13] Cronolog http://cronolog.org/ [14] Archive win-32 de cronolog [15] Apache-split http://patrick.cardona.free.fr/matice/apache-split. exe [16] FreeBSD, http://www.freebsd-fr.org/fr/ [17] PHP France http://www.phpfrance.com/ [18] Miscrosoft Internet Explorer http://www.microsoft.com/france/windows/downloads/ie/getitnow. mspx [19] MySQL http://www.mysql.fr/ [20] Camino, ttp://www.caminobrowser.org/ [21] GNU/Linux http://www.linux.org/ 50
BIBLIOGRAPHIE 51 [22] mod perl http://perl.apache.org/ [23] Dossier Open Source n o 2 http://pedagogie.ac-montpellier.fr/tice/assets/ll_matice/res/ ASSISAW.pdf [24] L A TEX http://www.latex-project.org/ [25] TEXLive http://www.tug.org/texlive/ [26] TeXmaker http://www.xm1math.net/texmaker/index_fr.html [27] ImageMagick http://www.imagemagick.org/script/index.php [28] Gthumb gthumb [29] Le Gimp http://www.gimp-fr.org/news.php