A partir d’Apache version 2.4.10, il est possible d’avoir des performances identiques à NGINX. Principalement en utilisant php-fpm avec le mod_fcgi.

Avec Ubuntu 14.04

Tout d’abord activer trusty-backports dans /etc/apt/source.list, puis autoriser les paquets backports en priorité dans le fichier /etc/apt/preferences

Package: *
Pin: release a=trusty-backports
Pin-Priority: 500

Ensuite exécuter

$ apt-get update && apt-get upgrade

Vérifier que Apache 2.4.10 est bien installé

$ apt-get install apache2

Installer php-fpm (php5-fpm ou php-7.0-fpm)

$ apt-get install php5-fpm

Créer un fichier /etc/apache2/conf-available/phpfcgi.conf

<FilesMatch "\.php$">
   # Pick one of the following approaches
   # Use the standard TCP socket
   #SetHandler "proxy:fcgi://localhost/:9000"
   # If your version of httpd is 2.4.9 or newer (or has the back-ported feature), you can use the unix domain socket
   #SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/"
   SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/"
</FilesMatch>
# Définition d'une configuration de mandataire qui convient.
# La partie qui est mise en correspondance avec la valeur de
# SetHandler est la partie qui suit le "pipe". Si vous devez faire
# une distinction, "localhost" peut être changé en un nom de serveur
# unique.
<Proxy "fcgi://localhost/" enablereuse=on max=10>
</Proxy>
# Passer le header Authorization
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

Ce fichier de configuration active la connexion à php-fpm pour tout les vhosts, il est possible de séparer (chroot) chaque vhosts d’apache et de le rediriger vers un php-fpm approprié pour plus de sécurité.
Activer les modules nécessaires

$ a2dismod mpm_prefork php5
$ a2enmod mpm_event
$ a2enconf phpfcgi
$ service apache2 restart

Debian Stretch

Avec debian, et maintenant php 7, lorsque que l’on installe php7.0-fpm, une conf est automatique créer dans le fichier /etc/apache2/conf-available/php7.0-fpm.conf

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.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/php/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>

Il suffit donc de l’activer (a2enconf php7.0-fpm)

Fonctionnement particulier de php-fpm

Il est possible d’agir sur des variables d’environnement de PHP par projet (répertoire), en utilisant un fichier .user.ini
La modification sera prise en compte à chaque redémarrage du service php-fpm ou toutes les 5 minutes.

Voilà un exemple:

upload_max_filesize=513M
post_max_size=513M
memory_limit=512M
mbstring.func_overload=0
always_populate_raw_post_data=-1
default_charset='UTF-8'
date.timezone='Europe/Paris'
env[APPLICATION_ENV] = "production"