L'objectif est de faire fonctionner un serveur Web pour des applications locales et pour des applications livrées en RPM, je prendrais phpMyAdmin comme exemple.

Apache version 2.4 ne sera pas dans les dépôts avant Fedora 18 (et sans doute RHEL 7), mais mon dépôt expérimental fournit un rétro-portage de ces paquets pour Fedora 16.

1. Installation

yum --enablerepo=remi-dev,remi install php-fpm httpd phpMyAdmin

2. Creation de mon site web

Avec apache, les pages sont installées par défaut dans /var/www/html, donc

echo '<h1>Mon appli</h1><?php  phpinfo();  ?>'  >/var/www/html/info.php

3. Désactiver mod_php

Si le paquet php est installé, la requete sera traitée par le moteur intégré, qu'il faut donc désactiver.

Dans le fichier /etc/httpd/conf.d/php.conf commenter la ligne

#AddHandler php5-script .php

L'appel de http://localhost/info.php doit donc juste afficher le titre (Mon Appli).

4. Configurer le proxy

On va demander à apache de rediriger les scripts PHP vers le service php-fpm, en ajoutant dans le php.conf

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

Après un redémarrage d'apache on doit obtenir le message 503 "Service Temporarily Unavailable", ainsi, que dans le journal :

[proxy:error] [pid 7960] (111)Connection refused: AH00957: FCGI: attempt to connect to 127.0.0.1:9000 (*) failed
[proxy_fcgi:error] [pid 7960] [client ::1:40505] AH01079: failed to make connection to backend: 127.0.0.1, referer: http://localhost/

Ce qui est normal, après un démarrage de php-fpm, on obtient le phpinfo attendu.

5. Configurer le proxy pour phpMyAdmin

On ajoutera une redirection pour les scripts PHP de phpMyAdmin (avant la configuration générale précédente), qui remplace l'alias définit habituellement.

ProxyPassMatch ^/phpMyAdmin/(.*\.php)$ fcgi://127.0.0.1:9000/usr/share/phpMyAdmin/$1

On ajoutera aussi le traitement des URL contenant uniquement un nom de dossier, afin de remplacer la directive DirectoryIndex :

ProxyPassMatch ^/phpMyAdmin(.*/)$ fcgi://127.0.0.1:9000/usr/share/phpMyAdmin$1index.php

Après relance d'apache, l'URL http://localhost/phpMyAdmin/ fonctionne comme attendue.

6. Conclusion

Dans cette configuration, on va pouvoir tirer pleinement profit d'apache pour les éléments statiques, par exemple en utilisant le MPM worker ou le MPM event et confier l'exécution des scripts PHP à un service dédié, qui peut d'ailleurs être sur une autre machine, comme pour d'autres langages.

N'hésitez pas à poster vos commentaires, vos résultats de test de performance, ou d'autres solutions de configuration, je ne suis pas certain d'avoir réellement trouvé la meilleure solution.

Voir aussi :