PHP-FPM et HTTPD 2.4
+
Par Remi le lundi 2 avril 2012, 09:39 - HowTo - Lien permanent
Le moteur php-fpm peut désormais fonctionner avec httpd 2.4 et le module mod_proxy_fcgi, voici un petit exemple de mise en oeuvre.
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 :
Commentaires
Merci pour l'information et les détails, c'est vraiment intéressant.
Voir aussi: Amélioration de PHP-FPM et HTTPD 2.4