Compiler un serveur apache n'est pas très compliqué, il suffit de charger les sources et d'utiliser le triptyque :

./configure
make
make install

Ce mode fonctionnement ne permet pas forcement une configuration optimale du binaire et des modules. Ce billet présente donc une méthode pour compiler un binaire minimal avec le chargement possible des modules.

Commencer par télécharger les sources de la dernière version ( 2.2.19 lors de la rédaction ). Pour une version de la branche 2.4.x voir le billet dédié et écrit postérieurement Compilation apache 2.4.x

cd /home
wget http://mirror.mkhelif.fr/apache//httpd/httpd-2.2.19.tar.gz
tar -xvzf httpd-2.2.19.tar.gz
cd httpd-2.2.19

Les outils de compilation doivent être présents sur la machine.

Sur Centos/RedHat si une installation minimale a été faite, il faut installer le groupe Outils de Développement et aussi le package zlib-devel ( sinon il y aura une erreur lors du configure sur le module deflate :configure: error: mod_deflate )

yum groupinstall "Outils de développement"
yum install zlib-devel

Sous Debian il faut installer le package build-essential

aptitude install build-essential

Puis lancer la compilation de apache ainsi :

./configure --enable-so --enable-mods-shared="all" --prefix=/usr/local/apache2 --with-mpm=prefork ( ou --with-mpm=worker, selon votre choix )
make
make install

L'ensemble est donc installé sous /usr/local/apache2, se positionner sous bin de ce répertoire et vérifier que le bianire ne contient que le minimum.

cd /usr/local/apache2/bin
./apachectl -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c

Les modules sont dans le répertoire /usr/local/apache2/modules. Pour tester il suffit de lancer le binaire du serveur

/usr/local/apache2/bin/apachectl -k start

L'arrêt de fait avec la commande suivante :

/usr/local/apache2/bin/apachectl -k stop

Fichier de configuration

Dans cet exemple nous allons mettre en place un fichier de configuration minimal. Les process apache sont lancés par un utilisateur nommé daemon par défaut, nous allons créer un user apache dédié à cela.

adduser -s /sbin/nologin apache

Puis editer le fichier /usr/local/apache2/conf/httpd.conf et y mettre uniquement les lignes suivantes :

ServerRoot /usr/local/apache2

User apache
Group apache

DocumentRoot /var/www/html
Listen 80

LoadModule mime_module modules/mod_mime.so
TypesConfig conf/mime.types

LoadModule dir_module modules/mod_dir.so
DirectoryIndex index.html

ErrorLog /var/log/apache2/error.log
LogLevel warn

Penser à créer les répertoires /var/www/html et /var/log/apache2.

mkdir -p /var/www/html
mkdir -p /var/log/apache2
chown -R apache:apache /var/log/apache2

Sous Centos penser aussi à invalider le parefeu sinon il sera impossible de se connecter depuis un client

service iptables stop
service ip6tables stop
chkconfig iptables off
chkconfig ip6tables off

Sous /var/www/html, mettre une page index.html quelconque :

<html>
  <head>
    <title>Page de test de Apache 2</title>
  </head>
  <body>
    <h1>Apache fonctionne !</h1>
  </body>
</html>

Relancer le serveur apache en spécifiant le fichier de configuration

/usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf -k start