Suite à un article paru dans le dernier GLMF, j'ai décidé de regarder de plus pès la confguration d'Apache2.
Tout le monde connaît le nom de serveur web qui reste le plus utilisé dans le monde.

- apache2-mpm-prefork ou apache2-mpm-worker
Il existe plusieurs vesions d'Apache2 mas les deux principales sont apache2-mpm-prefork et apache2-mpm-worker (MPM pour Multi-pocessing Modules qui définit la manière dont seront gérés les connexions clientes).

Dans la version apache2-mpm-prefork, Apache2 fonctionne apparemment de la même manière qu'Apache 1.3.
Le processus principal Apache2 est cloné en mémoire (fork). Cette version permet d'utiliser les blibiothèques php5 mais comme les processus sont répliqués de façon identiques, on consomme plus de mémoire.
Les processus vont communiquer entre eux via les IPC.
Dans la version apache2-mpm-worker, on utilise des threads. Les threads sont des files d'exécution au sein d'un même processus et les threads, contrairement aux processus forkés,  partagent les ressources, les zones mémoires et les informations communes.

- Nous allons installé la version monothreadée d'Apache2 puisque nous utiliserons les biliothèques php.

Si apache n'est pas installé, on le fait.
# apt-get install apache2-mpm-prefork


On regarde si Apache2 est bien lancé :
# netstat -nlp | grep -i apache
tcp6       0      0 :::80                   :::*                    LISTEN      1673/apache2
On voit bien ici qu'Apache2 écoute sur le port 80.

Si on veut s'assurer que c'est bien la version monothreadée qui est lancée
# ls -ltr /usr/sbin/apache2
lrwxrwxrwx 1 root root 34 21 nov.  22:31 /usr/sbin/apache2 -> ../lib/apache2/mpm-prefork/apache2

Voilà on en est sûr et on va même plus loin puisqu'on va regarder le nombre de fork.
ps -ef | grep -i apache2 | grep -v grep
root      1673     1  0 09:39 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  1905  1673  0 09:39 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  1906  1673  0 09:39 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  1907  1673  0 09:39 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  1909  1673  0 09:39 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  1910  1673  0 09:39 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  3129  1673  0 09:55 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  3133  1673  0 09:55 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  3145  1673  0 09:55 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  3147  1673  0 09:56 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  3148  1673  0 09:56 ?        00:00:00 /usr/sbin/apache2 -k start

# pstree -ph 1673
apache2(1673)─┬─apache2(1905)
              ├─apache2(1906)
              ├─apache2(1907)
              ├─apache2(1909)
              ├─apache2(1910)
              ├─apache2(3129)
              ├─apache2(3133)
              ├─apache2(3145)
              ├─apache2(3147)
              └─apache2(3148)

Tout ceci est configuré dans le fichier /etc/apache2/apache2.conf qui est LE fichier principal de configuration d'apache2
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves

    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0


StartServers : indique le nombre de processus qui vont être créé au moment du démarrage d'apache2. Ici 5.
MinSpareServers : Le nombre minimum de processus actifs ne répondant pas à une requête.
MaxSpareServers : Le nombre maximum de processus actifs ne répondant pas à une requête.

Si nombre de processus en attente Apache2 < MinSpareServers alors Apache2 lancera un nouveau fork par seconde
Si nombre de processus en attente Apache2 < MaxSpareServers alors Apache2 supprimera les processus forkés inutiles.

La variable MaxClient  correspond au nombre total de requête HTTP simultanée autorisée en direction d'Apache2.


Il existe d'autres fichiers de configuration à part le fichier de configuration principale apache2.conf :
/etc/apache2/envvars : fichier qui contient les variables d'environnement (APACHE_RUN_USER et APACHE_RUN_GROUP qui sont respectivement le user et le groupe avec lesquels est lancé Apache2, /var/log/apache2 le répertoire de log d'apache2)
ports.conf : liste des ports sur lequel apache2 va écouter. Vous pouvez ajouter d'autres ports que les deux traditionnels (80 et 443 en SSL)
Puis nous avons 4 répertoires :
/etc/apache2/mods-available : l'avantage d'Apache2 c'est son côté modulaire notamment. Tous les modules externes disponibles (et donc non compilés dans Apache2) sont dans ce répertoire
/etc/apache2/mods-enabled : il s'agit de tous les modules externes actifs dans Apache2.
/etc/apache2/sites-available : il s'agit des fichiers de configuration des sites disponibles
/etc/apache2/sites-enabled : il s'agit des sites actifs.

Voilà la suite au prochain épisode ;-)