php-fpm

Voilà quelques semaines que la version 5.3.3 de php est sortie avec comme belle nouveauté php-fpm .
Au risque de répéter la doc officielle , php-fpm est :
- FPM permet notamment de faire tourner plusieurs VHosts avec un UID/GID différent et des PHP.ini différents.
- Support de l'upload accéléré
- Statistiques de base (similaire au module mod_status d'Apache)
- Redémarrage de secours en cas de destruction accidentelle du cache opcode, lors de l'utilisation d'un accélérateur de code PHP
- Amélioration de la gestion des processus en cas de graceful stop/start
- Journalisation des scripts lents
- Journalisation de stdout et stderr
- fastcgi_finish_request() une fonction spéciale pour clôturer la connection avec le client, mais continuer un traitement php/
Installation
A partir de php 5.3.3 , les sources de php-fpm sont intégrés au core , il vous suffit dont d'ajouter le paramètre --enable-fpm à la compilation , voici donc un exemple de fichier de configuration à la compilation :
#!/bin/sh
export OPTIM=-02
./configure --prefix=/usr/local \
--enable-fpm
--with-xsl \
--enable-soap \
--with-gettext \
--enable-mbstring --with-mbstring=all \
--disable-debug \
--enable-memory-limit \
--enable-ftp \
--with-mcrypt \
--enable-zip \
--enable-calendar \
--enable-exif \
--enable-pdo \
--with-pdo-mysql \
--with-mysql \
--with-pdo-sqlite \
--with-sqlite \
--with-zlib \
--with-jpeg-dir \
--with-gd \
--with-freetype-dir=DIR \
--with-imap-ssl \
--with-kerberos \
--with-imap \
--with-curl \
--enable-bcmath \
Le seul impératif , est d'avoir le paquet libevent en version 1.4.11 minimum .
En cas de besoin voici les sources de cette lib : http://packages.debian.org/source/sid/libevent
Un simple
./configure make make install
fera l'affaire.
Configuration
Une fois l'installation de php terminée il vous faudra faire quelques petits réglages de base pour le bon fonctionnement .
nous allons commencer par editer le fichier de configuration par defaut de php-pfm
cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf vim /usr/local/etc/php-fpm.conf
J'ai pour habitude de tester avec les paramètres par défauts , puis d'adapter en fonction de mes besoins , voici donc la liste des paramètres à décommenter ( si ce n'est déjà fait ) , chez moi le groupe et l'utilisateur qui lance les process php sont www-data , à adapter dans votre cas , il est conseillé de mettre un utilisateur sans pouvoir .
- pid = /usr/local/var/run/php-fpm.pid
- error_log = /usr/local/var/log/php-fpm.log
- listen.allowed_clients = 127.0.0.1
- user = www-data
- group = www-data
- pm = dynamic
- pm.max_children = 50
- pm.start_servers = 20
- pm.min_spare_servers = 5
- pm.max_spare_servers = 35
- pm.max_requests = 500
Voilà pour le fichier de configuration .
Démarrage automatique
Nous allons mettre l'exécutable dans le répertoire init.d afin qu'il lance automatiquement php-fpm au démarrage du serveur .
cd /etc/init.d vim php-fpm
Voici le contenu .. très ... basique mais fonctionnel 
#!/bin/bash
start() {
echo -n "Starting PHP-FPM: "
/usr/local/sbin/php-fpm
}
stop() {
echo -n "Stopping PHP-FPM: "
killall -9 php-fpm
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: php-fpm {start|stop|restart}"
exit 1
;;
esac
exit 0
Enfin , la commande pour le lancement au démarrage du serveur
chmod 777 /etc/init.d/php-fpm update-rc.d php-fpm defaults
On peu maintenant lancer la bête , par un simple appel à : php-fpm
/etc/init.d/php-fpm start
Si tout se passe correctement vous ne devriez avoir aucun message d'erreur , et une série de process se mettent à l'écoute sur le port 9000 par défaut .
Je vous laisse explorer la doc pour affiner vos réglages et aller plus loin quand à la virtualisation d'hôtes .
Utiliser php-fpm avec Nginx semble donc maintenant évident .. voilà qui va nous simplifier la vie , plus particulièrement à cette étape : liaison php - nginx
Avec apache:
Merci à Stealth35
pour ceux qui voudraient tester sur apache voilà le code à ajouter dans votre configuration httpd.conf ou dans vos vhost si vous en utilisez:
<Location "/php-fpm"> Order Deny,Allow Deny from All Allow from ENV=REDIRECT_STATUS </Location> FastCgiExternalServer /php-fpm-handler -host 127.0.0.1:9000 AddType application/x-httpd-php .php Action application/x-httpd-php /php-fpm ScriptAlias /php-fpm /php-fpm-handler
Voici le troisième volet sur Nginx et son utilisation . 
Mais attention , cette deuxiéme méthode , n'est valable que si vous utilisez un framework , qui joue avec les réécritures d'url , car le script ci-dessus se traduit comme ceci :
Ca y est , voici la deuxième partie certainement attendu .. non !! ha .. bon .. spa grave ..

''Alors voilà , je vais essayer de présenter au mieux nginx , ou tout du moins , expliquer sont installation et utilisation . 

