Page d'archives pour la catégorie ‘Serveur web

Configuration modulaire Apache2

Introduction

Le serveur HTTP Apache2 de la fondation apache est un programme modulaire. De nouvelles fonctionnalités viennent s’ajouter au serveur en greffant un ensemble de modules. Ils peuvent être soit statiques, compilés avec les binaires du serveurs, soit dynamiques.

Dans leur forme dynamique les modules sont compilés en tant que “dynamic shared objects” aussi appelés DSO et sont distribués séparément.

La gestion des modules dans Debian

Activer un module particulier implique d’éditer le fichier de configuration d’apache pour ajouter une directive de type LoadModule propre à ce module. En fonction du module des options de configuration sont nécessaires, c’est le cas pour le module ssl par exemple.

Debian simplifie la gestion des modules en groupant les aspects propres à chaque module dans deux fichiers :

  • nom_du_module.load : instructions de chargement du module pour apache
  • nom_du_module.conf : la configuration du module

Les répertoires qui interviennent dans la gestion des modules sont les suivants :

  • mods-available : Contient les fichiers de configuration pour chaque module. Les nouveaux modules installés sont placés dans ce répertoire.
  • mods-enabled : Liste de liens symboliques qui pointent vers les fichiers de configuration situés dans “mods-available”. Seuls les modules dans ce répertoire sont activés par le serveur web.

Il est tout à fait possible de créer et supprimer les liens symboliques manuellement. Néanmoins les scripts suivants permettent d’automatiser cette tache et de grandement simplifier l’administration des modules :

  • a2enmod : Crée le(s) lien(s) symbolique(s) à partir du répertoire “mods-available” pour activer un module et charger sa configuration.
  • a2dismod : Supprime les liens symboliques du répertoire “mods-enabled” pour désactiver les modules.

Les virtuals hosts

La configuration des modules et des virtual hosts est gérée de manière très similaire.

On trouve donc les répertoires suivants dans le dossier de configuration /etc/apache2:

  • sites-available : Contient les fichiers de configuration pour chaque virtual host. Par convention de nommage, un fichier de configuration correspond à un site.
  • sites-enabled : Ensemble de liens symboliques qui pointent vers les fichiers de configuration situés dans “sites-available”. Les sites présents dans ce répertoire sont ceux qui sont pris en compte par le serveur web. Ce sont les sites qui sont activés. Ils sont chargés dans un ordre alphanumérique.

Les scripts pour activer et désactiver les virtual hosts sont les suivants :

  • a2ensite : Crée le lien symbolique à partir du répertoire “sites-available” pour activer la configuration d’un virtual host.
  • a2dissite : Supprime les liens symboliques créés dans le répertoires “sites-enabled”. Permet de facilement désactiver un virtual host.

Configuration des services

La configuration ‘externe’ du serveur en revanche est située dans un seul répertoire : “conf.d”

Les applications Web qui s’installent avec le système de packages Debian placent bien souvent un fichier de configuration dans ce répertoire.

PhpMyAdmin par exemple, crée un lien symbolique /etc/apache2/conf.d/phpmyadmin.conf qui pointe vers le fichier /etc/phpmyadmin/apache.conf

Ce fichier contient des directives de protection des répertoires ainsi que les alias de l’application.

My little hack

Je vous propose donc de modifier légèrement votre installation d’Apache2 pour améliorer la prise en compte de la configuration et la rendre plus “modulaire” :).

Voici les étapes à suivre :

1. Se logguer en tant qu’administrateur ou utiliser sudo.

2. Renommer le répertoire “conf.d” en “conf-available” :

mv /etc/apache2/conf.d /etc/apache2/conf-available

3. Créer le répertoire “conf-enabled” :

mkdir -p /etc/apache2/conf-enabled

4. Pour ne pas casser les dépendances des programmes web, créer un lien symbolique conf.d vers conf-available :

ln -s /etc/apache2/conf-available /etc/apache2/conf.d

5. Modifier la configuration d’Apache :

Dans le fichier de configuration apache2.conf, remplacer la ligne

Include /etc/apache2/conf.d/

par

Include /etc/apache2/conf-enabled/

6. Relancer apache :

/etc/init.d/apache2 restart

Automatisation :

Je me suis très fortement inspiré des scripts a2ensite et a2dissite pour créer les scripts “a2enconf” et “a2disconf

Téléchargez ces deux fichiers et placez les dans le répertoire /usr/sbin de votre serveur.

Vous disposez maintenant de deux nouveaux scripts pour ajouter et supprimer très rapidement les options de configuration des applications web que vous souhaitez appliquer à votre serveur web.

Additious

[BUG] apache 2 sur Debian lenny

Ce matin, je me suis aperçu que le blog spiroid n’était plus en ligne. En cherchant la cause sur le serveur et en analysant les logs d’erreur d’apache j’ai trouvé la ligne suivante :

[crit] (28) No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed

Je me suis cependant assuré qu’il restait de la place sur le disque dur à l’aide de la commande ‘df‘. Après une rapide recherche sur internet, j’ai trouvé que je n’étais pas le seul avoir ce problème.

Rapport de bug

Le bug a été signalé sur le système de bugtracking de debian : http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=450831

Les informations importantes :
Version d’apache concernée: 2.2.6-1
Debian : Lenny
Package : apache2-mpm-prefork

Cause

L’origine du problème pourrait venir de l’utilisation des sémaphores par le module rewrite (url rewriting).
On peut supposer qu’il s’agit d’un problème d’allocation mémoire.

Solution

Pas de patchs ni de correctifs ont été proposés pour le moment.

Solution temporaire

Pour débloquer la situation et libérer les ressources, entrez la commande suivante :
ipcs -s | grep www-data | awk ' { print $2 } ' | xargs ipcrm sem

Le problème est bloquant et risque de survenir après la rotation des logs configurée en général pour se produire chaque jour ou chaque semaine en temps normal. On peut ajouter temporairement la commande ci dessus dans les scripts de configuration de logrotate pour l’executer après chaque redémarrage d’apache lors des rotations de log (Non testé !)

A suivre …

EDIT : Corrigé depuis la version 2.2.8
EDIT : La correction du bug est prévue officiellement pour la version 2.2.9-3

Additious