Les fichiers de configuration
Note : La description des fichiers et répertoires liés à la configuration d’Apache est disponible dans le fichier /etc/apache2/README.
Toute modification d’un fichier de configuration ou le chargement/déchargement d’un module nécessite la relecture de la configuration, ceci peut-être obtenu par la commande :
sudo /etc/init.d/apache2 force-reload
De part sa conception, le serveur Apache répartit sa configuration dans un certain nombre de fichiers et répertoires que nous aborderons ici.
- apache2.conf : Il s’agit du fichier principal de configuration d’Apache.
- envvars : Ce fichier sert à définir les variables d’environnement du serveur. Par défaut ce fichier est vide. Mis à part quelques rares cas précis vous n’aurez pas à modifier celui-ci.
- httpd.conf : Ce fichier est présent afin de maintenir la compatibilité avec des applications plus anciennes. Il n’est plus utilisé avec la version actuelle d’Apache.
- magic : Il s’agit du fichier de configuration du module mod_magic_mime qui définit le comportement du serveur vis à vis de certains fichiers.
- ports.conf : C’est dans ce fichier que sont définis les ports d’écoute du serveur. Par défaut un serveur web écoute les requêtes sur le port 80, ce qui est modifiable en éditant ce fichier
- conf.d/ : Ce répertoire contient les "extensions" du fichiers apache2.conf. Dans ce répertoire nous pourrons créer des fichiers qui nous éviteront de modifier directement le fichier apache2.conf.
- mods-available/ : Ce répertoire contient les fichiers de configuration des modules d’Apache disponibles (mais pas necessairement activés).
- mods-enabled/ : Ce répertoire contient des liens vers les fichiers de configuration des modules d’Apache activés situées dans mods-available.
- sites-available/ : Ce répertoire fonctionne sur le même principe que les modules dans mods-available, mais cette fois ci concerne la configuration des sites disponibles sur le serveur
- sites-enabled/ : Ce répertoire contient des liens vers les fichiers de configuration des sites activés situées dans sites-available
- ssl/ : Contient la configuration d’Apache liée à SSL
Paramètres du fichier apache2.conf
Le paramètrage global du serveur web se fait par le biais du fichier apache2.conf ainsi que par les fichiers présents dans le dossier /etc/apache2/conf.d/. En effet, si vous ne souhaitez pas modifier directement le fichier principal de configuration, vous pouvez créer un fichier dans ce dossier. Celui-ci est alors automatiquement pris en compte par la directive Include présente dans le fichier apache2.conf.
Voici quelques directives que vous pouvez placer dans le fichier apache2.conf
ServerRoot : définit l’emplacement des fichiers de configuration du serveur.
exemple :
ServerRoot "/etc/apache2"
ServerName : définit le nom complet du serveur
exemple :
Servername www.monserveur.org
ServerAdmin : Définit l’adresse mail de l’administrateur du serveur qui apparaitra sur les pages d’erreurs
exemple :
ServerAdmin admin@monserveur.org
DocumentRoot : définit la racine des documents du serveur Web exemple :
DocumentRoot /var/www
Encodage de caractères
Si vous utilisez ce tutoriel, il y a fort à parier que vous souhaitez publier un site web en langue française. Or la langue de Molière dispose d’un certain nombre de particularités et notamment l’accentuation. Afin d’éviter l’affichage de caractères exotiques en lieu et place de vos "é", "è" ou encore "à" ou "ç", il est nécessaire d’indiquer à votre serveur web d’utiliser un jeu de caractères compatible avec la langue française. La prise en charge du caractère "€" relève elle aussi de son système d’encodage. Heureusement pour nous, Apache peut gérer un tel jeu de caractères. Pour cela nous allons donc le configurer :
sudo gedit /etc/apache2/apache2.conf
Cherchez la ligne suivante :
#AddDefaultCharset ISO-8859-1
Et modifiez la comme ceci
AddDefaultCharset ISO-8859-15
et ajoutez la ligne suivante dans le paragraphe qui suit :
AddCharset ISO-8859-15 .iso8859-15 .latin15 .fr
Il ne nous reste plus qu’à recharger la configuration d’Apache :
sudo /etc/init.d/apache2 reload
Configuration du port d’écoute
Tout serveur Web normalement configuré est censé attendre les connexions sur port 80/TCP. Or, rien ne vous empêche de modifier ce port pour des besoins spécifiques, ou juste pour sécuriser votre serveur. Nous verrons d’ailleurs plus tard lors de la configuration du mode SSL que cela sera indispensable. Afin de modifier le port d’écoute ou en ajouter un, il suffit de le mentionner dans le fichier ports.conf.
sudo gedit /etc/apache2/ports.conf
Vous pouvez alors, soit ajouter un port d’écoute en ajoutant une ligne à ce fichier, soit modifier le 80 en ce que vous souhaitez ; tout en prenant garde que le port choisi ne soit pas déjà affecté à un autre service. Exemple :
Listen 80
Listen 1880
Mon serveur web attendra les requêtes sur le port 80 ainsi que sur le port 1880
Listen 81
Mon serveur web n’attendra les requêtes que sur le port 81.
Une fois les modifications effectuées redémarrez le serveur par
sudo /etc/init.d/apache2 restart
Gestion des alias
La directive Alias permet de rendre accessibles des fichiers présents ailleur que dans la sous-arborescence définie grâce à la directive DocumentRoot. Elle permet donc d’accéder à des répertoires situés à l’extérieur de la racine du serveur.
Exemple
Alias /image /ftp/pub/image
Une requête pointant vers http://votre_serveur/image affichera le contenu du répertoire /ftp/pub/image comme si celui-ci était présent dans /var/www/image (comme défini dans la directive DocumentRoot plus haut)
NOTE : L’utilisation de cette directive dépend du module alias qui peut être chargé à l’aide des commandes :
sudo a2enmod alias
sudo /etc/init.d/apache2 force-reload
Hôtes virtuels
Une des fonctionnalités intéressantes du serveur web Apache est sa capacité à pouvoir héberger plusieurs sites web pour différentes adresses. Le même système pourra par exemple héberger le site www.toto.com et www.monsite.org.
Il existe plusieurs types d’hôtes virtuels. Nous n’aborderons ici que les serveurs virtuels basés sur le nom. Une documentation complète sur les hôtes vituels est disponible ici
Afin de pouvoir héberger plusieurs sites web disposant d’adresses différentes, il est nécessaire que la résolution des noms soit effective. Il faut donc pour cela disposer d’un système de résolution de type DNS qui effectue cette résolution pour vous. Vous pouvez utiliser un système de DNS gratuit de type DynDNS disponible sur http://www.dyndns.com. Si vous possédez votre propre nom de domaine vous pouvez mettre en place un serveur DNS par le biais du très efficace serveur Bind9, ou utiliser les serveurs DNS de votre fournisseur de nom de domaine.
La meilleure façon de créer un hôte virtuel basé sur le nom consiste à écrire un fichier situé dans le répertoire /etc/apache2/sites-available et contenant l’ensemble des paramètres de cet hôte. Ce fichier sera basé sur le modèle que nous allons créer : /etc/apache2/sites-available/example
NameVirtualHost *:80
<VirtualHost www.example.com:80>
ServerAdmin webmaster@www.example.com
DocumentRoot /www/docs/www.example.com
ServerName www.example.com
ErrorLog logs/www.example.com-error_log
CustomLog logs/www.example.com-access_log common
</VirtualHost>
Le conteneur accepte presque toutes les directives disponibles dans le cadre de la configuration du serveur principal, sa capacité à être personnalisé est donc très élevée.
Une fois votre hôte virtuel créé il est nécessaire d’activer cette configuration :
sudo a2ensite example
sudo /etc/init.d/apache2 force-reload
Pages d’erreurs
Dans le cas d’une erreur ou d’un problème, Apache peut être configuré pour effectuer quatres actions différentes :
- afficher le message d’erreur par défaut
- afficher un message personnalisé
- rediriger vers un document local pour traiter l’erreur
- rediriger vers une URL externe (un autre site web par exemple)
Afin d’activer les pages d’erreurs personnalisées il est nécessaire d’activer le module Include dont dépend cette fonctionnalité.
sudo a2enmod include
Pages d’erreurs en français
Nous allons activer les pages d’erreurs en français en éditant le fichier /etc/apache2/apache2.conf.
Cherchez cette partie
<IfModule mod_negotiation.c>
<IfModule mod_include.c>
Alias /error/ "/usr/share/apache2/error/"
<Directory "/usr/share/apache2/error">
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en es de fr
ForceLanguagePriority Prefer Fallback
</Directory>
ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
ErrorDocument 410 /error/HTTP_GONE.html.var
ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
</IfModule>
</IfModule>
Modifiez la ligne
LanguagePriority en es de fr
en
LanguagePriority fr en es de
Puis rechargez la configuration d’Apache avec la commande sudo /etc/init.d/apache2 force-reload
Pages d’erreurs personnalisées
Afin de créer des pages d’erreurs personnalisées, nous allons utiliser la directive ErrorDocument. Celle-ci accepte deux arguments : le numéro de l’erreur et le document à utiliser pour celle-ci.
ErrorDocument <numéro d'erreur> <document>
L’argument document peut prendre plusieurs valeurs, suivant l’action que l’on veut effectuer :
- le mot clé "default" : Apache affichera alors le message d’erreur par défaut
- "un message commencant par une double côte : Apache affichera le message depuis le guillemet ouvrant jusqu’à la fin de la ligne
- un chemin sur le système de fichier local : cela permet d’afficher nos pages d’erreurs personnalisées
- une URL entière vers laquelle le client sera redirigé lorsque l’erreur se produira
Exemple :
# On veut rediriger toutes les erreurs 404 (document non trouvé)
# vers la page http://www.example.com
ErrorDocument 404 http://www.example.com
# On veut afficher le message "Notre serveur a eu une erreur"
# pour toutes les erreurs 500 (erreur interne au serveur)
ErrorDocument 500 "Notre serveur a eu une erreur
# On veut afficher la page "/var/www/error/404.html" pour toutes
# les erreurs 404
# Mais on veut afficher le message d'erreur par défaut pour le
# répertoire /var/www/htdocs
ErrorDocument 404 /var/www/error/404.html
<Directory /var/www/htdocs>
ErrorDocument 404 default
[ autres directives de configuration ]
</Directory>
Vous pouvez maintenant personnaliser entièrement les pages d’erreurs de votre serveur web. Afin de connaitre la correspondance des numéros d’erreurs reportez vous au tableau suivant
400 Bad Request
401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable (encoding)
407 Proxy Authentication Required
408 Request Timed Out
409 Conflicting Request
410 Gone
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported
Une fois vos pages d’erreurs configurées, rechargez la configuration d’Apache avec la commande sudo /etc/init.d/apache2 force-reload
//////////////////////////////////////////////////////
L'ensemble de ce site est placé sous license GNU FDL et CC BY-SA
Auteur : Frédéric Bouby