Serveur Apache HTTP Version 2.4
Utilisation du serveur HTTP Apache sous Microsoft Windows
Ce document décrit l'installation, la configuration et l'exécution d'Apache 2.4 sous Microsoft Windows. Si vous avez des questions après avoir lu la documentation, ou si vous avez rencontré des évènements particuliers ou des rapports d'erreur, vous pouvez consultez la liste de diffusion de la communauté des utilisateurs.
Dans ce document, nous supposons que vous installez une distribution binaire d'Apache. Si vous voulez compiler Apache vous-même (par exemple pour aider au développement ou pour rechercher des bogues), référez-vous au document Compilation d'Apache pour Microsoft Windows.
Prérequis du système d'exploitation
La plate-forme Windows de base pour l'exécution d'Apache 2.4 est Windows 2000 ou supérieur. Veillez à toujours vous procurer et installer le dernier service pack afin d'éviter les bogues du système d'exploitation.
Téléchargement d'Apache pour Windows
Le projet du serveur HTTP Apache proprement dit ne fournit pas de distribution binaire mais seulement le code source. Certains membres du projet peuvent mettre à disposition des paquets binaires à titre individuel, mais ceux-ci n'ont pas vocation à être distribués publiquement.
Si vous n'êtes pas en mesure de compiler le serveur HTTP Apache vous-même, vous pouvez vous procurer un paquet binaire auprès des nombreuses distributions disponibles sur Internet.
Quelques solutions populaires pour déployer Apache httpd, et éventuellement PHP et MySQL sous Microsoft Windows :
Personnaliser Apache pour Windows
La configuration d'Apache est enregistrée dans les fichiers du
sous-répertoire conf
. Ce sont les même fichiers que
ceux utilisés pour configurer la version Unix, mais il y a quelques
directives spécifiques à Apache pour Windows. Voir l'index des directives pour la liste
des directives disponibles.
Les principales spécificités d'Apache pour Windows sont :
Comme Apache pour Windows est un programme multithread, il ne lance pas de processus séparé pour chaque requête, comme Apache peut le faire sous Unix. En fait, il n'y a en général que deux processus Apache en exécution : un processus parent, et un processus enfant qui traite les requêtes. Chaque requête est traitée par un thread séparé au sein du processus enfant.
Les directives de gestion de processus diffèrent également :
MaxConnectionsPerChild
: comme dans la version Unix, cette directive contrôle le nombre de connexions qu'un processus enfant particulier va traiter avant de s'arrêter. Cependant, à la différence d'Unix, un processus de remplacement n'est pas instantanément disponible. Utilisez la définition par défautMaxConnectionsPerChild 0
, sauf si vous risquez de manquer de mémoire dans des modules tiers ou dans des applications in-process.Attention : le fichier de configuration du serveur est rechargé lorsqu'un nouveau processus enfant est démarré. En conséquence, si vous avez modifiéhttpd.conf
, le nouveau processus enfant peut ne pas démarrer, ou vous pouvez obtenir des résultats inattendus.ThreadsPerChild
: il s'agit d'une nouvelle directive. Elle indique au serveur le nombre de threads qu'il doit utiliser. Elle définit le nombre maximum de connexions simultanées que le serveur peut gérer ; vous devez donc vous assurer que ce nombre soit suffisamment grand pour les besoins de votre site. La valeur par défautThreadsPerChild 150
est recommandée, mais doit être ajustée à la valeur maximale estimée de connexions simultanées à accepter.Les directives qui acceptent des noms de fichiers comme arguments doivent utiliser des noms de fichiers Windows et non Unix. Cependant, comme Apache peut interpréter les anti-slashes comme des séquences d'échappement de caractères, vous devez absolument utiliser des slashes dans les noms de chemins à la place des anti-slashes.
Alors que les noms de fichiers sont en général insensibles à la casse sous Windows, les URLs sont encore sensibles à la casse en interne avant d'être mises en correspondance avec le système de fichiers. Par exemple, les directives
<Location>
,Alias
, etProxyPass
utilisent toutes des arguments sensibles à la casse. Pour cette raison, il est particulièrement recommandé d'utiliser la directive<Directory>
lorsqu'on désire limiter l'accès à certains contenus du système de fichiers, car cette directive s'applique à tout contenu d'un répertoire, sans tenir compte de la manière dont on y accède. Pour vous assurer que seules des minuscules sont utilisées dans les URLs, vous pouvez utiliser ceci :RewriteEngine On RewriteMap lowercase int:tolower RewriteCond "%{REQUEST_URI}" "[A-Z]" RewriteRule "(.*)" "${lowercase:$1}" [R,L]
Lors de son exécution, Apache n'a besoin d'un accès en écriture qu'au répertoire des journaux et à toute arborescence de répertoires de cache configurée. Suite au problème d'insensibilité à la casse et au format de noms courts 8.3, Apache doit valider tous les noms de chemins fournis. Cela signifie que chaque répertoire qu'Apache évalue doit avoir les droits en lecture, listage et parcours, et ceci depuis la racine jusqu'aux feuilles. Si Apache2.4 est installé dans C:\Program Files, le répertoire racine, Program Files et Apache2.4 doivent tous être visibles pour Apache
Apache peut charger divers modules sans qu'il soit nécessaire de recompiler le serveur. Si Apache est compilé normalement, il va installer de nombreux modules optionnels dans le répertoire
\Apache2.4\modules
. Pour activer ces modules ou d'autres modules, on doit utiliser la directiveLoadModule
. Par exemple, pour activer le module status, ajoutez la ligne suivante (en plus des directives d'activation de status dansaccess.conf
) :LoadModule status_module modules/mod_status.so
Des informations sont aussi à votre disposition pour créer des modules chargeables
Apache peut aussi charger des extensions ISAPI (Internet Server Application Programming Interface), comme celles qu'utilise Microsoft IIS et d'autres serveurs Windows. Voir ici pour plus d'informations. Notez qu'Apache ne peut pas charger de filtres ISAPI, et que les gestionnaires ISAPI contenant des extensions de fonctionnalités Microsoft ne fonctionneront pas.
Pour les scripts CGI, la méthode qu'utilise Apache pour déterminer l'interpréteur du script est configurable grâce à la directive
ScriptInterpreterSource
Comme il est souvent difficile de gérer des fichiers avec des noms du style
.htaccess
sous Windows, vous avez tout intérêt à changer le nom de ce fichier de configuration par répertoire à l'aide de la directiveAccessFilename
.Toute erreur survenant au cours du processus de démarrage d'Apache est enregistrée dans le journal des évènements de Windows si l'on est sous Windows NT. Ce mécanisme fonctionne comme une sauvegarde pour les situations où Apache n'est pas encore prêt à utiliser le fichier
error.log
. Vous pouvez consulter le journal des évènements applicatifs Windows en utilisant l'observateur d'évènements : Démarrage - Paramètres - Panneau de configuration - Outils d'administration - Observateur d'évènements.
Exécuter Apache en tant que service
Apache fournit un utilitaire nommé Apache Service Monitor (Moniteur du service Apache). Grâce à lui, vous pouvez voir et gérer l'état de tous les services Apache installés sur toutes les machines du réseau. Pour pouvoir gérer un service Apache avec le moniteur, vous devez d'abord installer le service (soit automatiquement au cours de l'installation, soit manuellement).
Vous pouvez installer Apache en tant que service Windows NT à
partir de la ligne de commandes et depuis le sous-répertoire Apache
bin
comme suit :
httpd.exe -k install
Si vous avez installé plusieurs services Apache sur votre ordinateur, vous devrez spécifier le nom du service que vous voulez installer en utilisant la commande suivante (notez que si vous spécifiez un nom durant l'installation, vous devrez aussi le spécifier pour toute opération comportant l'option -k) :
httpd.exe -k install -n "Nom-service"
Si un service doit utiliser un fichier de configuration spécifique, utilisez ceci :
httpd.exe -k install -n "Nom-service" -f "c:\fichiers\Nom-service.conf"
Si vous utilisez la première commande sans paramètre particulier,
excepté -k install
, le service aura pour nom
Apache2.4
et le fichier de configuration sera censé
être conf\httpd.conf
.
Supprimer un service Apache est très simple. Utilisez simplement :
httpd.exe -k uninstall
On peut spécifier un service Apache particulier en utilisant :
httpd.exe -k uninstall -n "Nom service"
Normalement, le démarrage, le redémarrage et l'arrêt d'un
service Apache s'effectuent via le Moniteur de Service Apache, ou en
utilisant des commandes telles que NET START Apache2.4
et
NET STOP Apache2.4
, ou encore via le gestionnaire de
services standard de Windows. Avant de démarrer Apache en tant que
service dans quelque but que ce soit, vous devez tester le fichier
de configuration du service en utilisant :
httpd.exe -n "Nom-service" -t
Vous pouvez aussi contrôler un service Apache à l'aide de ses options de ligne de commande. Avec cette méthode, pour démarrer un service Apache installé, vous utiliserez :
httpd.exe -k start -n "Nom-Service"
Pour arrêter un service Apache via les options de lignes de commande, utilisez ceci :
httpd.exe -k stop -n "Nom-Service"
ou
httpd.exe -k shutdown -n "Nom-Service"
Vous pouvez aussi redémarrer un service en exécution et le forcer à relire son fichier de configuration en utilisant :
httpd.exe -k restart -n "Nom-Service"
Par défaut, tous les services Apache sont configurés pour
s'exécuter sous l'utilisateur system (le compte
LocalSystem
). Le compte LocalSystem
n'a
pas de privilèges sur votre réseau, que ce soit via un mécanisme
sécurisé de Windows, y compris le système de fichiers, des tubes
nommés, DCOM ou des RPC sécurisés. Il a cependant des privilèges
élevés en local.
LocalSystem
! Si Apache doit pouvoir accéder
à des ressources réseau, créez un compte séparé pour Apache comme
indiqué ci-dessous.Il est fortement fortement conseillé aux utilisateurs de créer un compte séparé pour exécuter le(s) service(s) Apache, et même obligatoire si vous devez accéder à des ressources réseau via Apache.
- Créez un compte d'utilisateur du domaine normal, et assurez-vous de retenir son mot de passe.
- Accordez à l'utilisateur nouvellement créé les privilèges
Log on as a service
etAct as part of the operating system
. Sous Windows NT 4.0, ces privilèges sont accordés via le Gestionnaire des utilisateurs du Domaine, mais sous Windows 2000 et XP, vous aurez plutôt intérêt à utiliser une GPO pour propager ces configurations. Vous pouvez aussi effectuer ces réglages via la Politique de Sécurité Locale intégrée à la MMC. - Vérifiez que le compte nouvellement créé est membre du groupe Utilisateurs
- Accordez à ce compte les droits Lecture et Exécution (RX) sur
tous les documents et répertoires de scripts (
htdocs
etcgi-bin
par exemple), et aussi sur l'exécutable binairehttpd.exe
. - Accordez aussi à ce compte les droits de modification sur le
répertoire
logs
.
logs
, sur lequel l'utilisateur doit
avoir au moins les droits de modification (RWXD).Si vous permettez à ce compte de se connecter en tant qu'utilisateur et service, vous pouvez ouvrir une session sous ce compte et vérifier s'il a bien le droit d'exécuter les scripts, de lire les pages web, et si vous pouvez démarrer Apache à partir d'une console Windows. Si tout fonctionne, et si vous avez suivi les étapes ci-dessus, Apache devrait s'exécuter en tant que service sans problème.
Lorsqu'Apache démarre en tant que service, il se peut que vous obteniez un message d'erreur du Gestionnaire de Services Windows. Par exemple, si vous essayez de démarrer Apache en utilisant l'applet Services du Panneau de configuration de Windows, vous pouvez obtenir le message suivant :
Could not start the Apache2.4 service on \\COMPUTER
Error 1067; The process terminated unexpectedly.
Vous obtiendrez cette erreur à caractère général pour tout problème survenant au cours du démarrage du service Apache. Afin de déterminer exactement la cause du problème, vous devez suivre les instructions permettant d'exécuter Apache pour Windows depuis la ligne de commande.
Si vous rencontrez des problèmes avec le service, il est conseillé de suivre les instructions ci-dessous afin d'essayer de démarrer httpd.exe depuis une console, et d'analyser les erreurs plutôt que vous démener à essayer de démarrer le service.
Exécuter Apache depuis la console
Il est en général recommandé d'exécuter Apache en tant que service, mais il est parfois plus simple d'utiliser la ligne de commande, en particulier au cours de la configuration initiale et les tests.
Pour exécuter Apache depuis la ligne de commande et en tant qu'application de console, utilisez la commande suivante :
httpd.exe
Apache va démarrer, et continuera son exécution jusqu'à ce qu'on l'arrête en tapant Ctrl-C.
Vous pouvez également démarrer Apache via le raccourci "Démarrer
Apache dans une console" placé dans Démarrer -->
Programmes --> Apache HTTP Server 2.4.xx --> Control Apache
Server
au cours de l'installation. Ceci va
ouvrir une console Windows, et y démarrer Apache.
Si vous n'avez pas installé Apache en tant que service, la
fenêtre Windows restera ouverte jusqu'à ce que vous arrêtiez Apache
en tapant Ctrl-C dans cette fenêtre. Le serveur va alors s'arrêter
au bout de quelques secondes. Cependant, si vous avez installé
Apache en tant que service, c'est ce dernier que le raccourci
ci-dessus va lancer. Si le service Apache est déjà en cours
d'exécution, le raccourci va rester sans effet.
Si Apache s'exécute en tant que service, vous pouvez l'arrêter en ouvrant une autre console et en entrant :
httpd.exe -k shutdown
Plutôt que de lancer Apache à partir d'une console, il est préférable de l'exécuter en tant que service car dans ce cas, il termine proprement les opérations en cours avant de s'éteindre.
Si le serveur a été lancé depuis une console, vous ne pouvez l'arrêter qu'en pressant la combinaison de touches Ctrl-C dans la même fenêtre.
Vous pouvez aussi redémarrer Apache. Ceci le force à recharger son fichier de configuration. Toute opération en cours peut être achevée sans interruption. Pour redémarrer Apache, vous pouvez soit taper Control-Break dans la fenêtre de console que vous avez utilisée pour le démarrer, soit entrer :
httpd.exe -k restart
si le serveur s'exécute en tant que service.
kill -TERM pid
et
kill -USR1 pid
. L'option de ligne de commande
-k
a été choisie à titre de rapprochement avec la
commande kill
utilisée sous Unix.Si la fenêtre de la console Apache se ferme immédiatement ou
inopinément après le démarrage d'Apache, ouvrez une console Windows
depuis le menu Démarrer --> Programmes. Placez-vous dans le
répertoire d'installation d'Apache, tapez la commande
httpd.exe
, et observez le message d'erreur. Allez
ensuite dans le répertoire des journaux, et visualisez le fichier
error.log
pour détecter d'éventuelles erreurs de
configuration. Si Apache a été installé dans C:\Program
Files\Apache Software Foundation\Apache2.4\
, vous
pouvez entrer ce qui suit :
c:
cd "\Program Files\Apache Software Foundation\Apache2.4\bin"
httpd.exe
Attendez ensuite qu'Apache s'arrête ou tapez Ctrl-C. Entrez alors la commande suivante :
cd ..\logs
more < error.log
Lorsqu'on travaille avec Apache, il est important de comprendre comment ce dernier trouve son fichier de configuration. Vous pouvez spécifier un fichier de configuration à partir de la ligne de commande de deux façons :
L'option
(sous Windows 9x, il est recommandé d'utiliser la ligne de commande à cause du manque de fiabilité du support des services fourni par ce système).-f
permet de spécifier un chemin absolu ou relatif vers un fichier de configuration particulier :httpd.exe -f "c:\fichiers-de-mon-serveur\autre-config.conf"
ou
httpd.exe -f fichiers-de-mon-serveur\autre-config.conf
L'option
-n
permet de spécifier le service Apache installé dont le fichier de configuration doit être utilisé :httpd.exe -n "Nom-service"
Dans les deux cas, la directive ServerRoot
doit être correctement définie
dans le fichier de configuration.
Si vous ne spécifiez aucun fichier de configuration à l'aide des
options -f
ou -n
, Apache utilisera le nom
du fichier de configuration compilé dans le serveur, en général
conf\httpd.conf
. Ce chemin codé en dur est relatif au
répertoire d'installation. Vous pouvez vérifier ce chemin à partir
de la valeur de l'étiquette SERVER_CONFIG_FILE
en
invoquant Apache avec l'option -V
, comme ceci :
httpd.exe -V
Apache va ensuite essayer de déterminer la valeur de son
ServerRoot
en effectuant les
recherches suivantes, dans cet ordre :
- Une directive
ServerRoot
via l'option de ligne de commande-C
. - L'option de ligne de commande
-d
. - Le répertoire de travail courant.
- Une entrée de la base de registre créée dans le cas d'une installation binaire.
- La racine des documents (
DocumentRoot
) codée en dur dans le serveur. Elle correspond par défaut à/apache
, et vous pouvez le vérifier en tapanthttpd.exe -V
et en recherchant l'étiquetteHTTPD_ROOT
.
Si vous n'avez pas effectué d'installation binaire, dans certains scénarios, Apache va signaler l'absence de cette clé de registre. On peut passer outre cet avertissement si le serveur a été en mesure de trouver son fichier de configuration d'une autre manière.
La valeur de cette clé correspond au répertoire ServerRoot
qui contient lui-même le
sous-répertoire conf
. Lors de son démarrage, Apache lit
le fichier httpd.conf
à partir de ce répertoire. Si ce
fichier contient une directive ServerRoot
qui spécifie un répertoire
différent de celui que contient la clé de registre ci-dessus, Apache
oubliera la clé de registre, et utilisera le répertoire spécifié par
le fichier de configuration. Si vous déplacez le répertoire Apache
ou ses fichiers de configuration, il est vital de mettre à jour la
directive ServerRoot
dans
httpd.conf
afin de refléter la nouvelle
localisation.
Vérification de l'installation
Une fois Apache démarré (soit à partir d'une console Windows,
soit en tant que service), ce dernier va se mettre à l'écoute sur
le port 80 (à moins que vous ayiez modifié la directive Listen
dans les fichiers de
configuration ou que vous ayiez installé Apache pour l'utilisateur
courant seulement). Pour vous connecter au serveur et accéder à la
page par défaut, lancez un navigateur et entrez cette URL :
http://localhost/
Apache devrait renvoyer une page de bienvenue et vous devriez
voir s'afficher "It Works!". Si rien ne se passe ou si vous obtenez
une erreur, consultez le fichier error.log
dans le
sous-répertoire logs
. Si votre serveur n'est pas
connecté au réseau, ou si vous avez de sérieux problèmes avec la
configuration de votre DNS (Domain Name Service), vous devez
utiliser cette URL :
http://127.0.0.1/
Si Apache écoute un port non standard, vous devez le préciser explicitement dans l'URL :
http://127.0.0.1:8080/
Après que votre installation de base fonctionne, vous devez la
configurer correctement en éditant les fichiers du sous-répertoire
conf
. Encore une fois, si vous modifiez la
configuration du service Apache sous Windows NT, essayez d'abord de
redémarrer le service depuis la ligne de commande afin de vous
assurer de l'absence d'erreur.
Comme Apache ne peut pas partager le même port avec d'autres applications TCP/IP, il se peut que vous soyez amené à arrêter, désinstaller ou reconfigurer certains services avant de démarrer Apache. Ces services entrant en conflit avec Apache comprennent les autres serveurs WWW, certaines implémentations de pare-feu, et même certaines applications client (comme Skype) qui utilisent le port 80 afin de contourner les pare-feu.
Configuration de l'accès aux ressources réseau
L'accès à des fichiers par le réseau peut être spécifié via deux mécanismes fournis par Windows :
- Association de lettres de lecteur
- Par exemple,
Alias "/images/" "Z:/"
- chemins UNC
- Par exemple,
Alias "/images/" "//imagehost/www/images/"
L'association de lettres de lecteur permet à l'administrateur de maintenir une correspondance avec une certaine machine et un certain chemin en dehors de la configuration d'Apache httpd. Cependant, ces associations ne sont possibles que dans le cadre des sessions interactives, et ne sont pas directement disponibles pour Apache httpd lorsqu'il est démarré en tant que service. N'utilisez par conséquent que des chemins UNC pour les ressources réseau dans httpd.conf, de façon à ce que les ressources soient accessibles quelle que soit la manière dont Apache httpd a été démarré (des procédures exotiques et probablement sujettes aux erreurs peuvent permettre de contourner la restriction due aux associations de lettres de lecteur, mais leur utilisation est déconseillée).
Exemple de DocumentRoot avec chemin UNC
DocumentRoot "//dochost/www/html/"
Exemple de DocumentRoot avec adresse IP dans le chemin UNC
DocumentRoot "//192.168.1.50/docs/"
Exemple d'Alias et répertoire correspondant avec chemin UNC
Alias "/images/" "//imagehost/www/images/" <Directory "//imagehost/www/images/"> #... <Directory>
Lorsqu'Apache s'exécute en tant que service, vous devez créer un compte spécifique afin de pouvoir accéder aux ressources réseau, comme décrit ci-dessus.
Personnalisation sous Windows
Si on utilise un grand nombre de redirections de journaux via des pipes, il est souvent nécessaire d'augmenter la taille de la mémoire du bureau ("desktop heap"). Pour une information plus détaillée, veuillez vous reporter à la documentation sur les redirections de journaux.