AS201281 Wiki

Your check engine light is on!

User Tools

Site Tools


gnu_linux_server:webserver_apache_2:mpm_worker_php

Apache 2 MPM worker et PHP

Les installations classiques d’Apache 2 (avec PHP) sur 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 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 :

<VirtualHost [ipv6]:80 ipv4:80>
  DocumentRoot /var/www/mon_site
 
  <Directory "/var/www/mon_site">
    AddHandler fcgid-script .php
    FCGIWrapper /usr/lib/cgi-bin/php5 .php
    Options ExecCGI Indexes FollowSymLinks MultiViews
  </Directory>
</VirtualHost>

Cela peut vite être lourd si on a beaucoup de VirtualHost à changer. Pour se simplifier la vie et si l'on utilise mod_macro, il est possible de réaliser une macro simple :

<Macro UsePHP $directory>
  <Directory $directory>
    AddHandler  fcgid-script .php
    FCGIWrapper /usr/lib/cgi-bin/php5 .php
    Options     ExecCGI Indexes FollowSymLinks MultiViews
  </Directory>
</Macro>

On utilise la macro dans un VirtualHost de cette manière :

<VirtualHost [ipv6]:80 ipv4:80>
  ...
  Use UsePHP répertoire
  ...
</VirtualHost>
gnu_linux_server/webserver_apache_2/mpm_worker_php.txt · Last modified: 2021/01/04 20:41 by 127.0.0.1