Ce chapitre donne un aperçu des fonctions et de l'environnement du serveur Apache 2. Vous pourrez retrouver tous les aspects développés dans la documentation (en partie en français) du produit à l'adresse suivante apache.org.
Apache 2 a très certainement été installé par défaut lors de l'installation de votre Debian. Pour le vérifier : dpk g -l | gr ep apach e2
ii apache2
ii apache2-common
ii apache2-mpm-prefork
ii apache2-utils
ii libapache2-mod-perl2
ii libapache2-mod-php4 (ou libapache2-mod-php5)
Si Apache2 n'est pas installé, la commande : apt-get in stal l apach e2 installera le serveur web avec ses dépendances.
Vous aurez certainement besoin par la suite du module php alors autant l'installer tout de suite : apt-get in stal l l ibapach e2-m od-php4 (ou apt-get in stal l l ibapach e2-m od-php5)
Si vous voulez installer la documentation en local : apt-get in stal l’apach e2-doc
Le serveur HTTP Apache2 est un programme modulaire. Mise à part quelques modules directement intégrés dans le programme binaire httpd, l'administrateur peut choisir les fonctionnalités qu'il souhaite en activant des modules.
De même, il existe plusieurs fichiers de configuration tous présents dans /etc/apache2/.
Le fichier de configuration principal est /etc/apache2/apache2.conf Il contient les paramètres généraux et communs à tous les serveurs et plusieurs "Include" vers les autres fichiers.
Le fichier de configuration /etc/apache2/ports.conf contient la liste des ports en écoute.
On trouve tous les fichiers concernant les modules dans le répertoire /etc/apache2/mods-available/.
On y trouve deux catégories de fichiers : *.load et *.conf
Les fichiers avec l'extension load charge effectivement les modules dynamiques :
cat /etc/apache2/mods-available/userdir.load
LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so
Les fichiers avec l'extension conf sont les fichiers de configuration des modules :
cat /etc/apache2/mods-available/userdir.conf
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
</Directory>
</IfModule>
On trouve les fichiers concernant les modules activés dans le répertoire /etc/apache2/mods-enabled/ : ce sont uniquement ces fichiers qui sont inclus dans le fichier de configuration principal par les directives :
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Et ces fichiers sont en fait des liens qui pointent vers les fichiers de /etc/apache2/mods-available
Pour activer un module (ce qui revient donc à créer le lien), il est pratique d'utiliser la commande suivante : a2enm od m od_user dir .
Mais on peut bien évidemment créer le lien "à la main".
On trouve tous les fichiers de configuration des serveurs web
/etc/apache2/sites-available/
On trouve les fichiers de configuration des sites web activés dans le répertoire /etc/apache2/sites-enabled/ : ce sont uniquement ces fichiers qui sont inclus dans le fichier de configuration principal par la directive :
Include /etc/apache2/sites-enabled/[^.#]*
Et ces fichiers sont en fait des liens qui pointent vers les fichiers de /etc/apache2/sites-available
De même que pour les modules, pour activer un site, il existe une commande : a2en site fich ier _con f. "fichier_conf" étant un fichier de configuration présent dans /etc/apache2/sites-available/
La documentation est dans /usr/share/doc.
Les journaux sont dans /var/log/apache2/.
Le script de lancement du service serveur est dans /etc/init.d
Pour que le serveur Web puisse répondre à une demande d'un client, il doit être démarré : /etc/in it.d/apach e2 star t.
Apache2 ne fonctionne qu'en standalone (la directive ServerType n'est donc plus reconnu).
Ce paragraphe décrit les principaux paramètres pour mettre en place un service HTTP minimum.
Prenez la peine de faire une sauvegarde des fichiers de configuration avant de procéder à toutes modifications (par exemple : cp -r p /etc/apach e2 /etc/apach e2.in it).
Les modifications ne seront prises en compte que si les fichiers de configurations sont relus /etc/in it.d/apach e2 r eload ou si le service est redémarré /etc/in it.d/apach e2 r estar t.
Vous pouvez vérifier la syntaxe des fichiers de configuration par la commande : apach e2 -t
Comment retrouver rapidement le fichier dans lequel se trouve une directive? :
grep -ni "documentroot" /etc/apache2/*
ne renvoie rien...
grep -ni « documentroot » /etc/apache/*/*
sites-available/default:5: DocumentRoot /var/www
sites-enabled/000-default:5: DocumentRoot /var/www
L'option « ni » permet de chercher sans tenir compte de la casse et de renvoyer aussi le numéro de la ligne. L'astérisque peut être remplacé par un nom de fichier.
Dans le fichier /etc/apache2/ports.conf
Listen 80, indique quel est le port utilisé par le service (par défaut 80).
Il est possible d'utiliser un autre port, par contre vous devrez spécifier au navigateur quel est le port utilisé par le serveur. Si vous configurez par exemple le port 8080 (Listen 8080) sur une machine
MonDomaine.edu, vous devrez spécifier dans le navigateur
MonDomaine.edu:8080, pour que le serveur reçoive et traite votre requête.
Dans le fichier /etc/apache2/apache2.conf user www-data et group www-data, spécifient le compte anonyme utilisé par le serveur une fois qu'il est lancé. En effet, pour accéder aux ports inférieurs à 1024, le serveur utilise un compte administrateur, ce qui présente des dangers. Une fois le processus actif, il utilisera l'UID d'un autre compte (ici www-data). Ce compte doit pouvoir lire les fichiers de configuration et ceux de la racine du serveur HTTP (attention donc aux droits sur les pages web desservies). D'autres distributions utilisent le compte “nobody” ou “apache”
ServerRoot /etc/apache2, indique l'adresse du répertoire racine du serveur, où sont stockés les fichiers de configuration du serveur HTTP.
Cette adresse peut être modifiée.
PidFile /var/run/apache2.pid, indique le fichier où le serveur en exécution stocke son numéro de processus (PID).
ErrorLog, fichier error_log, journalisation des erreurs. L'adresse est calculée à partir de ServerRoot. Si ServerRoot est /etc/httpd et ErrorLog logs/error_log, le chemin complet est /var/log/apache /logs/error_log.
Il est fréquent d'héberger plusieurs serveurs web sur un même poste aussi la déclar ation et le par am étr age des différ en ts ser veur s est dépor tée dan s des fich ier s à placer dan s /etc/apach e2/sites-avai lable/. Le fich ier default y est déjà présent pour assurer le paramétrage du site principal par défaut dont la racine se trouve, toujours par défaut à /var/www/.
Le site par défaut est déjà activé ; on retrouve donc un lien vers ce fichier dans /etc/apache2/sites-enabled.
Sinon, le principe est le suivant :
On crée un fichier de configuration (appellé conf_site) pour un site web spécifique dans /etc/apache2/sites-available/.
On active ce fichier de configuration par la commande : a2en site con f_site ; cette commande a pour effet de créer un lien dans /etc/apache2/sites-enabled/ qui pointe vers /etc/apache2/sitesavailable/conf_site.
De plus, i l est aussi possible de fair e exécuter plusieur s in stan ces d'Apach e en spécifiant un fichier de configuration particulier par une commande du style : apach e -f fich ier _con fig où fichier_config est le nom du fichier de configuration, en chemin absolu (sinon il est considéré comme situé relativement à la directive ServerRoot, c'est-à-dire /etc/apache2, par défaut).
Les directives qui suivent correspondent à des serveurs spécifiques et sont donc incluses dans les fichiers de configuration présents dans /etc/apache2 /sites-available/ , notamment celui par défaut /etc/apache2/sitesavailable/default.
ServerAdmin [email protected], précise quel est le compte qui reçoit les messages. Par défaut un compte spécifique administrateur de site web (à modifier pour une adresse comme [email protected]).
ServerName www.MonDomaine.edu, indique le nom ou l'alias avec lequel la machine est désignée. Par exemple, l'hôte ns1.MonDomaine.edu, peut avoir le nom d'alias www.MonDomaine.edu. Ce nom doit correspondre à une adresse IP, donc être renseigné dans un serveur DNS (ou dans un premier temps mais à éviter en production dans un fichier hosts sur le cient). S'il n'est pas défini, alors le serveur tentera de le résoudre à partir de sa propre adresse IP. Voir la résolution de nom avec un DNS.
DocumentRoot /var/www, indique l'emplacement par défaut des pages
HTML quand une requête accède au serveur. Exemple : la requête MonDomaine.edu/index.html pointe en fait sur le fichier local /var/ww/index.html sauf si le répertoire est pointé par une directive tel que Alias (voir ci-après).
Alias /CheminVu/ /CheminRéel/, par exemple : "/icons/ /usr/share /apache/icons/", ce paramètre permet de renommer, à la manière d'un lien logique, un emplacement physique avec un nom logique.
Exemple: vous voulez que www.MonDomaine.edu/test/index.html, ne corresponde pas physiquement à un répertoire sur la racine du serveur HTTP (défini par la directive précédente DocumentRoot) mais à un emplacement qui serait /usr/local/essai. Vous pouvez mettre dans le fichier de configuration d'Apache un alias de la forme: alias /test/
/usr/local/essai/
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin, de la forme "ScriptAlias FakeName
RealName", indique où sont physiquement situés les scripts sur le disque, ainsi que l'alias utilisé par les développeurs pour le développement des scripts et des pages. Un développeur utilisera un lien (exemple : /cgi-bin/NomDuScript où /cgi-bin/ est un alias sur /home/httpd/cgi-bin/), et c'est le script /home/httpd/cgi-bin /NomDuScript qui sera effectivement exécuté. La mise en place d'alias permet de restructurer ou déplacer un serveur sans avoir à modifier toutes les pages développées.
DirectoryIndex donne le ou les noms des fichiers que le serveur doit rechercher si le navigateur passe une requête sur un répertoire. Par exemple sur une requête MonDomaine.edu, le serveur va rechercher dans l'ordre s'il trouve un fichier index.html, index.stml, index.cgi... en fonction des paramètres de cette variable.
On peut activer ou non (activée par défaut) l'option "Indexes" au niveau d'un répertoire (voir la partie suivante concernant la sécurisation des accès) de manière à ce que si une URL pointe sur un répertoire, et aucun fichier défini par DirectoryIndex n'existe dans ce dernier, alors le serveur retourne une liste du contenu du répertoire. Si l'indexation n'est pas activée (ce qui est plus sécurisé), on obtient une page d'erreur 403 ("You don't have permission to access /repertoire on this server").
Ce chapitre donne un aperçu des fonctions et de l'environnement du serveur Apache 2. Vous pourrez retrouver tous les aspects développés dans la documentation (en partie en français) du produit à l'adresse suivante apache.org.
Apache 2 a très certainement été installé par défaut lors de l'installation de votre Debian. Pour le vérifier : dpk g -l | gr ep apach e2
ii apache2
ii apache2-common
ii apache2-mpm-prefork
ii apache2-utils
ii libapache2-mod-perl2
ii libapache2-mod-php4 (ou libapache2-mod-php5)
Si Apache2 n'est pas installé, la commande : apt-get in stal l apach e2 installera le serveur web avec ses dépendances.
Vous aurez certainement besoin par la suite du module php alors autant l'installer tout de suite : apt-get in stal l l ibapach e2-m od-php4 (ou apt-get in stal l l ibapach e2-m od-php5)
Si vous voulez installer la documentation en local : apt-get in stal l’apach e2-doc
Le serveur HTTP Apache2 est un programme modulaire. Mise à part quelques modules directement intégrés dans le programme binaire httpd, l'administrateur peut choisir les fonctionnalités qu'il souhaite en activant des modules.
De même, il existe plusieurs fichiers de configuration tous présents dans /etc/apache2/.
Le fichier de configuration principal est /etc/apache2/apache2.conf Il contient les paramètres généraux et communs à tous les serveurs et plusieurs "Include" vers les autres fichiers.
Le fichier de configuration /etc/apache2/ports.conf contient la liste des ports en écoute.
On trouve tous les fichiers concernant les modules dans le répertoire /etc/apache2/mods-available/.
On y trouve deux catégories de fichiers : *.load et *.conf
Les fichiers avec l'extension load charge effectivement les modules dynamiques :
cat /etc/apache2/mods-available/userdir.load
LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so
Les fichiers avec l'extension conf sont les fichiers de configuration des modules :
cat /etc/apache2/mods-available/userdir.conf
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
</Directory>
</IfModule>
On trouve les fichiers concernant les modules activés dans le répertoire /etc/apache2/mods-enabled/ : ce sont uniquement ces fichiers qui sont inclus dans le fichier de configuration principal par les directives :
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Et ces fichiers sont en fait des liens qui pointent vers les fichiers de /etc/apache2/mods-available
Pour activer un module (ce qui revient donc à créer le lien), il est pratique d'utiliser la commande suivante : a2enm od m od_user dir .
Mais on peut bien évidemment créer le lien "à la main".
On trouve tous les fichiers de configuration des serveurs web
/etc/apache2/sites-available/
On trouve les fichiers de configuration des sites web activés dans le répertoire /etc/apache2/sites-enabled/ : ce sont uniquement ces fichiers qui sont inclus dans le fichier de configuration principal par la directive :
Include /etc/apache2/sites-enabled/[^.#]*
Et ces fichiers sont en fait des liens qui pointent vers les fichiers de /etc/apache2/sites-available
De même que pour les modules, pour activer un site, il existe une commande : a2en site fich ier _con f. "fichier_conf" étant un fichier de configuration présent dans /etc/apache2/sites-available/
La documentation est dans /usr/share/doc.
Les journaux sont dans /var/log/apache2/.
Le script de lancement du service serveur est dans /etc/init.d
Pour que le serveur Web puisse répondre à une demande d'un client, il doit être démarré : /etc/in it.d/apach e2 star t.
Apache2 ne fonctionne qu'en standalone (la directive ServerType n'est donc plus reconnu).
Ce paragraphe décrit les principaux paramètres pour mettre en place un service HTTP minimum.
Prenez la peine de faire une sauvegarde des fichiers de configuration avant de procéder à toutes modifications (par exemple : cp -r p /etc/apach e2 /etc/apach e2.in it).
Les modifications ne seront prises en compte que si les fichiers de configurations sont relus /etc/in it.d/apach e2 r eload ou si le service est redémarré /etc/in it.d/apach e2 r estar t.
Vous pouvez vérifier la syntaxe des fichiers de configuration par la commande : apach e2 -t
Comment retrouver rapidement le fichier dans lequel se trouve une directive? :
grep -ni "documentroot" /etc/apache2/*
ne renvoie rien...
grep -ni « documentroot » /etc/apache/*/*
sites-available/default:5: DocumentRoot /var/www
sites-enabled/000-default:5: DocumentRoot /var/www
L'option « ni » permet de chercher sans tenir compte de la casse et de renvoyer aussi le numéro de la ligne. L'astérisque peut être remplacé par un nom de fichier.
Dans le fichier /etc/apache2/ports.conf
Listen 80, indique quel est le port utilisé par le service (par défaut 80).
Il est possible d'utiliser un autre port, par contre vous devrez spécifier au navigateur quel est le port utilisé par le serveur. Si vous configurez par exemple le port 8080 (Listen 8080) sur une machine
MonDomaine.edu, vous devrez spécifier dans le navigateur
MonDomaine.edu:8080, pour que le serveur reçoive et traite votre requête.
Dans le fichier /etc/apache2/apache2.conf user www-data et group www-data, spécifient le compte anonyme utilisé par le serveur une fois qu'il est lancé. En effet, pour accéder aux ports inférieurs à 1024, le serveur utilise un compte administrateur, ce qui présente des dangers. Une fois le processus actif, il utilisera l'UID d'un autre compte (ici www-data). Ce compte doit pouvoir lire les fichiers de configuration et ceux de la racine du serveur HTTP (attention donc aux droits sur les pages web desservies). D'autres distributions utilisent le compte “nobody” ou “apache”
Cette adresse peut être modifiée.
PidFile /var/run/apache2.pid, indique le fichier où le serveur en exécution stocke son numéro de processus (PID).
ErrorLog, fichier error_log, journalisation des erreurs. L'adresse est calculée à partir de ServerRoot. Si ServerRoot est /etc/httpd et ErrorLog logs/error_log, le chemin complet est /var/log/apache /logs/error_log.
Il est fréquent d'héberger plusieurs serveurs web sur un même poste aussi la déclar ation et le par am étr age des différ en ts ser veur s est dépor tée dan s des fich ier s à placer dan s /etc/apach e2/sites-avai lable/. Le fich ier default y est déjà présent pour assurer le paramétrage du site principal par défaut dont la racine se trouve, toujours par défaut à /var/www/.
Le site par défaut est déjà activé ; on retrouve donc un lien vers ce fichier dans /etc/apache2/sites-enabled.
Sinon, le principe est le suivant :
On crée un fichier de configuration (appellé conf_site) pour un site web spécifique dans /etc/apache2/sites-available/.
On active ce fichier de configuration par la commande : a2en site con f_site ; cette commande a pour effet de créer un lien dans /etc/apache2/sites-enabled/ qui pointe vers /etc/apache2/sitesavailable/conf_site.
De plus, i l est aussi possible de fair e exécuter plusieur s in stan ces d'Apach e en spécifiant un fichier de configuration particulier par une commande du style : apach e -f fich ier _con fig où fichier_config est le nom du fichier de configuration, en chemin absolu (sinon il est considéré comme situé relativement à la directive ServerRoot, c'est-à-dire /etc/apache2, par défaut).
Les directives qui suivent correspondent à des serveurs spécifiques et sont donc incluses dans les fichiers de configuration présents dans /etc/apache2 /sites-available/ , notamment celui par défaut /etc/apache2/sitesavailable/default.
ServerName www.MonDomaine.edu, indique le nom ou l'alias avec lequel la machine est désignée. Par exemple, l'hôte ns1.MonDomaine.edu, peut avoir le nom d'alias www.MonDomaine.edu. Ce nom doit correspondre à une adresse IP, donc être renseigné dans un serveur DNS (ou dans un premier temps mais à éviter en production dans un fichier hosts sur le cient). S'il n'est pas défini, alors le serveur tentera de le résoudre à partir de sa propre adresse IP. Voir la résolution de nom avec un DNS.
DocumentRoot /var/www, indique l'emplacement par défaut des pages
HTML quand une requête accède au serveur. Exemple : la requête MonDomaine.edu/index.html pointe en fait sur le fichier local /var/ww/index.html sauf si le répertoire est pointé par une directive tel que Alias (voir ci-après).
Alias /CheminVu/ /CheminRéel/, par exemple : "/icons/ /usr/share /apache/icons/", ce paramètre permet de renommer, à la manière d'un lien logique, un emplacement physique avec un nom logique.
Exemple: vous voulez que www.MonDomaine.edu/test/index.html, ne corresponde pas physiquement à un répertoire sur la racine du serveur HTTP (défini par la directive précédente DocumentRoot) mais à un emplacement qui serait /usr/local/essai. Vous pouvez mettre dans le fichier de configuration d'Apache un alias de la forme: alias /test/
/usr/local/essai/
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin, de la forme "ScriptAlias FakeName
RealName", indique où sont physiquement situés les scripts sur le disque, ainsi que l'alias utilisé par les développeurs pour le développement des scripts et des pages. Un développeur utilisera un lien (exemple : /cgi-bin/NomDuScript où /cgi-bin/ est un alias sur /home/httpd/cgi-bin/), et c'est le script /home/httpd/cgi-bin /NomDuScript qui sera effectivement exécuté. La mise en place d'alias permet de restructurer ou déplacer un serveur sans avoir à modifier toutes les pages développées.
On peut activer ou non (activée par défaut) l'option "Indexes" au niveau d'un répertoire (voir la partie suivante concernant la sécurisation des accès) de manière à ce que si une URL pointe sur un répertoire, et aucun fichier défini par DirectoryIndex n'existe dans ce dernier, alors le serveur retourne une liste du contenu du répertoire. Si l'indexation n'est pas activée (ce qui est plus sécurisé), on obtient une page d'erreur 403 ("You don't have permission to access /repertoire on this server").