====== Apache 2 MPM worker et PHP ======
Les installations classiques d’Apache 2 (avec PHP) sur [[http://www.debian.org/|Debian]] se basent sur une version bien spécifique du serveur web : la version **prefork**. Son comportement est donc de créer des processus lourds pour traiter les différents clients qui veulent accéder aux pages web. L’inconvénient c’est que la multiplication des processus pour le système d’exploitation c’est lourd. Pour le soulager un peu, on peut utiliser une version d’Apache pas forcément ultra connue s’appelant **worker**. Cela permet de traiter les clients avec des **threads** (processus légers) et c’est particulièrement intéressant pour les processeurs récents.
Pour installer la version **worker** d’Apache, rien de plus simple :
aptitude install apache2-mpm-worker
L'inconvénient est que le mod PHP5 n'est pas //thread safe//. On ne peut donc pas l’utiliser avec la version multithread de Apache. Il existe tout de même une solution pour faire l’interprétation des scripts PHP : la technique [[http://fr.wikipedia.org/wiki/FastCGI|FastCGI]]. À la base CGI était utilisé pour faire du contenu dynamique sur le web avec plein de langages de programmation (Perl, C, script shell, etc...). En fait, il n’y a pas vraiment de limite de langages. FastCGI peut donc parfaitement interpréter du PHP. Pour activer cela, on installe alors 2 paquets :
aptitude install libapache2-mod-fcgid php5-cgi
Si mod_fcgid n’est pas automatiquement activé dans Apache 2, il faut aussi entrer la commande :
a2enmod fcgid
Dans le cas où l'on a besoin de faire des modifications dans la configuration de PHP, on ira plus voir ///etc/php5/apache2/php.ini// mais plutôt ///etc/php5/cgi/php.ini//.
L'inconvénient c'est que, contrairement à **mod_php5** pour **apache2-mpm-prefork**, les pages PHP ne seront pas interprétées sans modifier les différents **VirtualHost** qui peuvent servir des scripts PHP. Il faudra donc ajouter dans chaque directive **Directory** contenant désignant des répertoires avec du PHP les directives suivantes :
AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php
Options ExecCGI
La ligne **AddHandler** permet de spécifier quelle extension de fichier est à exécuter via FastCGI. **FCGIWrapper** donne le programme à exécuter pour traiter l’extension donnée. Et il ne faut pas oublier l’option **ExecCGI** sans quoi le PHP ne sera pas interprété.
Au final, cela pourra donner un VirtualHost dans le genre de celui-ci :
DocumentRoot /var/www/mon_site
AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php
Options ExecCGI Indexes FollowSymLinks MultiViews
Cela peut vite être lourd si on a beaucoup de VirtualHost à changer. Pour se simplifier la vie et si l'on utilise [[mod_macro|mod_macro]], il est possible de réaliser une macro simple :
AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php
Options ExecCGI Indexes FollowSymLinks MultiViews
On utilise la macro dans un VirtualHost de cette manière :
...
Use UsePHP répertoire
...