PHP FPM est une implémentation alternative à PHP FastCGI qui offre en général de bien meilleur performances qu’en tant que module Apache.
Le principe est de faire fonctionner PHP de manière séparée et d’installer le module FastCGI d’Apache afin de faire communiquer Apache et PHP.
Installation
Vous l’aurez compris, pour installer PHP FPM il faut passer par le gestionnaire de paquet
sudo apt-get install php5-fpm
Pour qu’apache puisse communiquer avec PHP5 FPM il faut installer le module fast-cgi.
sudo apt-get install libapache2-mod-fastcgi
Voilà, maintenant il va falloir configurer les choses.
Configuration
La configuration de PHP se trouve dans le dossier /etc/php5
, à l’intérieur de ce dossier vous aurez plusieurs sous-dossiers correspondant aux multiples versions de PHP que vous aurez installé sur votre système.
- cli, configuration utilisée lorsque l’on appelle PHP en ligne de commande
- fpm, configuration utilisée pour PHP FPM
Dans notre cas il faudra donc modifier le fichier /etc/php5/fpm/php.ini
. La configuration proposée par défaut est relativement correcte et vous ne devriez pas avoir grand-chose à changer. On remarquera que la propriété display_errors
est à off par défaut, ce qui veut dire qu’en cas d’erreur rien ne sera affiché à l’utilisateur. Il faudra alors regarder les fichiers de logs pour comprendre les problèmes.
Comme d’habitude la configuration est morcelée en plusieurs fichier et on retrouve dans le dossier conf.d
les fichiers permettant de configurer les modules PHP. Par défaut, vous ne devriez avoir qu’un fichier correspondant à la configuration d’opcache. Si vous installez de nouveaux modules, il faudra passer par ce dossier pour les configurer.
Enfin, nous avons la possibilité de gérer le nombre de processus PHP qui seront lancés en ajoutant ou modifiant les configurations situées dans le dossier /etc/php5/fpm/pool.d/
. Si vous comptez héberger plusieurs applications différentes il peut être intéréssant de créer plusieurs ressources fonctionnant avec des utilisateurs différents.
- listen, permet d’indiquer le fichier de socket qui sera utilisé pour communiquer avec le processus
- user et group, permet d’indiquer l’utilisateur qui sera le propriétaire de votre processus. Il faudra bien vérifier que l’utilisateur (ou le groupe) en question ait les bons droits.
Si vous modifiez la configuration il faudra redémarrer PHP5 FPM pour qu’elle soit prise en compte.
sudo service php5-fpm restart
Configuration d’Apache en FastCGI
Maintenant que notre PHP FPM est lancé il faut dire à Apache comment traiter les fichiers PHP. Pour cela on va modifier la configuration de notre module /etc/apache2/mods-available/fastcgi.conf
(on peut aussi gérer cette configuration par Virtual Host dans le cas où on a créé plusieurs configurations dans pool.d
).
<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
Une fois cette modification effectuée il vous faudra activer le module Action
sudo a2enmod actions
sudo service apache2 restart
Maintenant votre Apache utilisera votre ressource PHP FPM lorsqu’il rencontrera des fichiers PHP.
Installation de modules PHP
Certaines fonctionnalités de PHP ne sont pas incluses dans le core et il faudra installer des modules pour les faire fonctionner. À vous d’installer les modules dont vous avez besoin.
Voici quelques exemples :
php -m # affiche la liste des modules disponibles (compilés avec php)
sudo apt-get install php5-mcrypt # pour CakePHP
sudo apt-get install php5-curl # on a tjrs besoin de curl ^^
sudo apt-get install php5-gd # Librairie pour le traitement d'image
Les modules sont automatiquement activés, et les fichiers de configurations sont placés dans le dossier conf.d
. N’oubliez pas de redémarrer Apache pour que vos modifications soient prises en compte.