Installation

On installe donc Apache2 avec le module qui va bien, et PHP-FPM :

apt install apache2-mpm-event php7.0-fpm

Pour un Apache qui était déjà installé, le mode prefork doit être désactivé et mod_php désinstallé, pour ensuite activer le mode event
a2dismod mpm_prefork php7
a2enmod mpm_event
apt purge libapache2-mod-php7
systemctl restart apache2

Activer PHP7.0-FPM avec mod_proxy_fcgi

Pour le moment PHP ne fonctionne pas sur notre serveur, et pour cause, il n’a pas été activé et configuré.

On peut le vérifier en créant un fichier /var/www/html/info.php avec pour contenu

<?php phpinfo(); ?>

Si on essaie d’y accéder (http://srv.example.net/info.php) on se retrouve avec une belle page blanche et des erreurs dans les logs (/var/log/apache2/error.log).

On va donc activer le module suivant :

  • proxy_fcgi : qui va nous permettre de rediriger les requêtes PHP vers FastCGI
a2enmod proxy_fcgi

Ensuite on créer le fichier /etc/apache2/conf-available/php7.0-fpm.conf :

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php5.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
        SetHandler "proxy:unix:/run/php7.0-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>

Si on veut que PHP soit fonctionnel pour tous les sites de notre serveur, on active globalement cette configuration et on redémarre le service Apache2 :

a2enconf php5-fpm
systemctl restart apache2