Date de publication: le mercredi 22 août 2007 à 15h06
Dernière modification: par Pascal BOYER le vendredi 17 septembre 2010 à 10h15
« Article précédent: Apache 1.3.37 : compiler et installer le serveur web (VII)
» Article suivant: Apache 1.3.37 : compiler et installer le module mod_deflate (IX)
Si la compilation de Apache s'est bien déroulée, il est grand temps de voir ce qui reste à faire pour pouvoir le démarrer sans obtenir de messages d'erreur.
Apache 1.3.37 : le fichier de configuration httpd.conf
Avant de vouloir démarrer Apache, il est indispensable de créer un fichier de configuration adapté à votre situation.
Emplacement du fichier de configuration
Le fichier de configuration des versions 1.3 de Apache se nomme httpd.conf et doit se situer dans le répertoire de configuration du serveur, c'est à dire dans le répertoire:
apache_1.3.37/conf/
Par défaut, vous avez plusieurs fichiers de configuration à votre disposition:
ls -la conf/httpd.conf*
-rw-r--r-- 1 root root 44478 2007-08-21 23:27 conf/httpd.conf.default -rw-rw-r-- 1 root root 43189 2007-08-20 09:58 conf/httpd.conf-dist -rw-rw-r-- 1 root root 30576 2004-11-24 20:10 conf/httpd.conf-dist-nw -rw-rw-r-- 1 root root 34695 2007-08-20 09:58 conf/httpd.conf-dist-win
Normalement, ces fichiers se partagent en deux catégories:
-
celle qui contient les fichiers modifiés par le module mod_ssl:
- httpd.conf.default
- httpd.conf-dist-win
- httpd.conf-dist
-
celle qui contient les fichiers non modifiés par le module mod_ssl:
- httpd.conf-dist-nw
Pour connaître le code ajouté par le module mod_ssl aux bas des fichiers, reportez vous à ce passage: Compiler et installer les modules .
Fichier httpd.conf minimaliste
Il n'est pas évident de proposer un exemple de fichier de configuration s'adaptant à la situation de chaque lecteur. Cependant, je vous propose un squelette minimaliste qui devrait ne nécessiter que très peu de modifications de votre part pour que vous puissiez au moins, dans un premier temps, tester la validité de votre tout nouveau serveur web.
Pour cela, nous allons partir du fichier pré-existant httpd.conf-dist-nw (nw = Net Ware est un système d'exploitation de réseau appartenant à Novell) dont nous allons faire une copie:
cd /usr/local/ServeurWeb/apache_1.3.37
cp -p conf/httpd.conf-dist-nw conf/httpd.conf
:
Si un fichier conf/httpd.conf existe déjà, renommez-le avant de créer la copie de conf/httpd.conf-dist-win.
Normalement, le fichier httpd.conf-dist-nw n'a pas été modifié par le module SSL. Quand bien même ce serait le cas, cela n'a pas grande importance. Pour la suite, nous supposerons qu'il n'a pas été modifié.
Voici donc le contenu de ce fichier débarrassé de tous les commentaires (j'ai conservé l'ordre des directives):
Saut de ligne
A présent, voici le même fichier, mais cette fois-ci, adapté au cas qui me sert d'exemple pour cette série d'articles:
Saut de ligne
Les modifications apportées à cette deuxième version du fichier httpd.conf sont de trois ordres. Consultez-les et adaptez-les si besoin.
Tout d'abord, j'ai modifié, partout où cela s'est avéré nécessaire, les chemins qui, par défaut, ne peuvent pas correspondre à notre cas particulier. Toutes les lignes où j'ai modifié le chemin sont précédées d'une ligne:
# chemin
Ensuite, il faut renseigner la directive ServerName en indiquant soit l'adresse IP du serveur soit le nom de domaine dans lequel est placé le serveur. L'unique ligne modifiée est précédée de celle-ci:
# identifiant
Et enfin, il est intéressant de notifier l'adresse e-mail de l'administrateur du serveur avec la directive ServerAdmin. L'unique ligne modifiée est précédée de celle-ci:
# admin@e-mail
:
Je rappelle que vous avez à votre disposition la documentation complète en français de toutes les directives qu'il est possible de placer dans le fichier de configuration du serveur apache:
Modules Apache 1.3
:
Attention aux droits du répertoire logs/ qui doivent permettre, éventuellement, l'accès en lecture à un logiciel comme, par exemple,
AWStats
.
Apache 1.3.37 : démarrer le serveur web
Pour démarrer immédiatement votre serveur Apache, vous avez à votre disposition un fichier:
apache_1.3.37/src/support/apachectl
...dont les options sont les suivantes:
- start : exécute le binaire httpd (en clair, lance le serveur Apache).
- startssl : exécute le binaire httpd avec le mode sécurisé SSL activé.
- stop : arrête l'exécution du binaire httpd (en clair, arrête le serveur Apache)
- restart : redémarre, s'il tourne déjà, le binaire httpd par l'envoi du signal SIGHUP. Si le binaire httpd ne tourne pas déjà, alors il est lancé.
- fullstatus : affiche un état complet du serveur. Il faut que Lynx soit installé et le module mod_status activé.
- status : fait la même chose que l'option précédente mais affiche moins d'informations. Prérequis identiques.
- graceful : effectue un redémarrage en douceur du serveur s'il tourne déjà, sinon le démarre.
- configtest : effectue un contrôle de la syntaxe du fichier de configuration httpd.conf
- help : affiche ces options.
Le binaire httpd est situé dans le répertoire:
apache_1.3.37/bin/
:
Ce binaire, c'est Apache.
Modifier le fichier apachectl
Le fichier src/support/apachectl contient, par défaut, ces deux lignes:
PIDFILE=/usr/local/apache/logs/httpd.pid HTTPD='/usr/local/apache/src/httpd'
...dont il faut modifier ainsi les chemins:
PIDFILE=/usr/local/ServeurWeb/apache_1.3.37/logs/apache.pid HTTPD='/usr/local/ServeurWeb/apache_1.3.37/src/httpd'
Il est indispensable que le chemin de la variable PIDFILE soit identique à celui de la directive PidFile du fichier httpd.conf
Tester l'option fullstatus
Lançon tout simplement la commande suivant:
src/support/apachectl fullstatus
Message d'erreur renvoyé par le navigateur Lynx
...alors que dans le même temps, je peux parfaitement utiliser l'URI suivante:
http://www.luxpopuli.fr/server-status/
...avec succès dans Firefox. Pour remédier à ce problème, il faut éditer le fichier apachectl et modifier cette ligne:
LYNX="lynx -dump
en:
LYNX="lynx"
Si on relance ensuite la commande, on obtient alors ceci:
Affichage du statut du serveur Apache avec le navigateur Lynx
Démarrer le serveur Apache
Le fichier de configuration est placé dans apache_1.3.37/conf/httpd.conf, ne reste plus qu'à lancer cette commande:
src/support/apachectl start
src/support/apachectl restart: configuration broken, ignoring restart src/support/apachectl restart: (run 'apachectl configtest' for details)
Comme nous le suggère le message d'erreur renvoyé, lançons la commande ci-dessous:
src/support/apachectl configtest
Syntax error on line 15 of /usr/local/ServeurWeb/apache_1.3.37/conf/httpd.conf: Invalid command 'ThreadStackSize', perhaps mis-spelled or defined by a module not included in the server configuration
Cette directive, ThreadStackSize, qui indique la taille de la pile à utiliser pour les threads, est spécifique à NetWare. On commente donc cette directive dans le fichier httpd.conf, puis on relance la commande:
src/support/apachectl configtest
Syntax OK
Définir les directives User et Group
On essaye à nouveau de démarrer le serveur:
src/support/apachectl start
PHP Warning: Unknown(): Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20020429/imagick.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20020429/imagick.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce type in Unknown on line 0 src/support/apachectl start: httpd started
Le message d'avertissement ( PHP Warning: Unkn...), qui ne s'affiche qu'avec l'option start de la commande apachetctl, est certainement dû à une option de compilation de PHP. Cependant, je n'ai, à ce jour, aucun problème particulier avec la gestion des images dans eZ Publish. Comme par ailleurs, je ne développe pas en PHP...
Toujours est-il que la dernière ligne du message indique que le serveur est lancé. Ce que nous vérifions immédiatement:
ps aux |grep httpd
root 7063 0.0 0.2 5468 2824 pts/0 S+ 08:06 0:00 vi apache_1.3.37/conf/httpd.conf root 7135 0.0 0.0 2876 756 pts/1 R+ 08:10 0:00 grep httpd
Hé bien, le serveur ne tourne toujours pas. Si on regarde le fichier error_log/
tail -f -n30 logs/error_log
[Thu Aug 23 08:09:17 2007] [error] FastCGI: access for server (uid -1, gid -1) failed: read not allowed [Thu Aug 23 08:09:17 2007] [error] FastCGI: can't create dynamic directory "/usr/local/ServeurWeb/apache_1.3.37/logs/fastcgi/dynamic": access for server (uid -1, gid -1) failed: read not allowed PHP Warning: Unknown(): Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20020429/imagick.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20020429/imagick.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce type in Unknown on line 0 [Thu Aug 23 08:09:17 2007] [error] FastCGI: access for server (uid -1, gid -1) failed: read not allowed [Thu Aug 23 08:09:17 2007] [error] FastCGI: can't create dynamic directory "/usr/local/ServeurWeb/apache_1.3.37/logs/fastcgi/dynamic": access for server (uid -1, gid -1) failed: read not allowed [Thu Aug 23 08:09:17 2007] [alert] FastCGI: process manager exiting, getpwuid(4294967295) couldn't determine user name, you probably need to modify the User directive PHP Warning: Unknown(): Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20020429/imagick.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20020429/imagick.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce type in Unknown on line 0 [Thu Aug 23 08:09:17 2007] [alert] getpwuid: couldn't determine user name from uid 4294967295, you probably need to modify the User directive [Thu Aug 23 08:09:17 2007] [alert] getpwuid: couldn't determine user name from uid 4294967295, you probably need to modify the User directive [Thu Aug 23 08:09:17 2007] [alert] getpwuid: couldn't determine user name from uid 4294967295, you probably need to modify the User directive [Thu Aug 23 08:09:17 2007] [alert] getpwuid: couldn't determine user name from uid 4294967295, you probably need to modify the User directive [Thu Aug 23 08:09:17 2007] [notice] Apache/1.3.37 (Unix) mod_perl/1.30 mod_fastcgi/2.4.2 PHP/4.4.7 mod_ssl/2.8.28 OpenSSL/0.9.8e configured -- resuming normal operations [Thu Aug 23 08:09:17 2007] [notice] Accept mutex: sysvsem (Default: sysvsem) [Thu Aug 23 08:09:17 2007] [alert] Child 7129 returned a Fatal error... \nApache is exiting! [Thu Aug 23 08:09:17 2007] [alert] getpwuid: couldn't determine user name from uid 4294967295, you probably need to modify the User directive
...il nous indique, par le biais des messages [alert], qu'il y a un propblème avec l'identifiant de l'utilisateur sous lequel les processus fils de Apache se lancent. En clair, il faut définir et renseigner, dans le fichier httpd.conf, les directives User et Group
Pour cela, on va créer un utilisateur et un groupe système (voir cette doc pour plus de détails):
adduser --system --home /usr/local/www --no-create-home --shel /bin/sh --group --uid 35 apache
Ajout de l'utilisateur système « apache » (identifiant : 35)... Ajout du nouveau groupe « apache » (identifiant : 35)... Ajout du nouvel utilisateur « apache » (identifiant : 35) avec le groupe « apache »... Répertoire personnel « /usr/local/www » non créé.
Ensuite, on édite le fichier de configuration httpd.conf pour y ajouter ces deux lignes:
User apache Group apache
...et on tente à nouveau de démarrer Apache:
src/support/apachectl start
PHP Warning: Unknown(): Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20020429/imagick.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20020429/imagick.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce type in Unknown on line 0 src/support/apachectl start: httpd started
On contrôle que le serveur tourne effectivement:
ps aux |grep httpd
root 7853 0.4 0.8 108204 8624 ? Ss 13:20 0:00 /usr/local/ServeurWeb/apache_1.3.37/src/httpd apache 7855 0.0 0.5 108204 5564 ? S 13:20 0:00 /usr/local/ServeurWeb/apache_1.3.37/src/httpd apache 7856 0.0 0.5 108204 5564 ? S 13:20 0:00 /usr/local/ServeurWeb/apache_1.3.37/src/httpd apache 7857 0.0 0.5 108204 5564 ? S 13:20 0:00 /usr/local/ServeurWeb/apache_1.3.37/src/httpd apache 7858 0.0 0.5 108204 5564 ? S 13:20 0:00 /usr/local/ServeurWeb/apache_1.3.37/src/httpd apache 7859 0.0 0.5 108204 5564 ? S 13:20 0:00 /usr/local/ServeurWeb/apache_1.3.37/src/httpd
Tout semble tourner enfin rond...
Pour tester le serveur, plaçons un fichier index.html à la racine du serveur, c'est à dire à la racine de /usr/local/www/ (voir la directive DocumentRoot du fichier httpd.conf), avec ce code:
<h1 style="color: red; font-size: 3em; text-align: right;">Ceci est ma page d'accueil</h1> <p style="text-align: justify;">Je suis rudement content de mon serveur Apache 1.3.37 que je viens fraîchement de compiler et qui semble tourner comme une horloge. Y a pas à dire, les gars de la fondation Apache font du bon boulot !</p>
Puis accédons à cette page avec notre navigateur:
Hé bien voilà, tout fonctionne !
Automatiser le démarrage du serveur Apache
Nous allons voir comment faire en sorte que le serveur Apache démarre en même temps que la machine sur laquelle il est installé.
On va écrire deux petits scripts. Le premier pour démarrer le serveur:
vi S90apache_1.3.37
#!/bin/bash /usr/local/ServeurWeb/apache_1.3.37/src/support/apachectl start exit
...que l'on rend exécutable:
chmod +x S90apache_1.3.37
...puis que l'on copie dans le répertoire correspondant au runlevel (niveau d'exécution) par défaut de la machine (voir le fichier /etc/inittab). Sous Debian, le runlevel par défaut est 2, donc on déplace le script dans le répertoire rc2.d:
mv S90apache_1.3.37 /etc/rc2.d/
Le deuxième script:
vi K90apache_1.3.37
#!/bin/bash /usr/local/ServeurWeb/apache_1.3.37/src/support/apachectl stop exit
...que l'on le rend exécutable:
chmod +x S90apache_1.3.37
...permet de stopper Apache et doit donc être placé dans deux runlevels: celui du reboot (6 sous Debian) et celui de l'arrêt (0 sous Debian):
cp K90apache_1.3.37 /etc/rc0.d/
et
mv K90apache_1.3.37 /etc/rc6.d/
Et c'est tout.
Apache 1.3.37 : les modules activés
Pour voir la liste des modules qui sont liés statiquement et donc lancés en même temps que le serveur, il faut lancer cette commande:
src/httpd -l
Compiled-in modules: http_core.c mod_vhost_alias.c mod_env.c mod_log_config.c mod_mime_magic.c mod_mime.c mod_negotiation.c mod_status.c mod_include.c mod_autoindex.c mod_dir.c mod_cgi.c mod_asis.c mod_imap.c mod_actions.c mod_userdir.c mod_alias.c mod_rewrite.c mod_access.c mod_auth.c mod_headers.c mod_usertrack.c mod_so.c mod_setenvif.c mod_ssl.c mod_php4.c mod_fastcgi.c mod_perl.c
Commentaires














