• # pool php5-fpm

    Posté par (site web personnel, Mastodon) . En réponse au journal Journal tuto : Plateforme LEMP. Évalué à 6.

    Un truc de bien, c'est qu'avec php5-fpm on peut facilement lancer des « pool » avec différents utilisateurs propres à un ou plusieurs sites.

    Dans Debian c'est dans /etc/php5/fpm/pool.d/

    Exemple, le pool par défaut :

    sed -e 's/;.*$//;s/^ *$//' /etc/php5/fpm/pool.d/www.conf | grep -v '^$'
    [www]
    user = www-data
    group = www-data
    listen = /var/run/php5-fpm.sock
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    chdir = /

    Un brève lecture montre qu'il est très facile de lancer php5-fpm avec un autre utilisateur sur un autre socket, et de tuner d'autres options encore.

    Après dans votre configuration nginx, vous pouvez écrire un fichier qui contient cela (notez le « php5-fpm » après « upstream » :

    upstream php5-fpm {
     server unix:/run/php5-fpm.sock;
    }

    Et ensuite, quand vous configurez un site,

    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $request_filename;
    fastcgi_pass php5-fpm;

    Et ce pour plusieurs sites. Pas besoin de réécrire le socket, il suffit de réemployer le nom, ça veut dire aussi qu'on peut changer le nom du socket ou passer sur un port réseau, et peut-être même une autre technologique que php5-fpm... sans reconfigurer tous les sites.


    Ainsi on peut imaginer un premier pool

    [www]
    user = www-data
    group = www-data
    listen = /var/run/php5-fpm.sock
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    chdir = /

    avec

    upstream php5-fpm {
     server unix:/run/php5-fpm.sock;
    }

    et phpmyadmin, phppgadmin, phpldapadmin, lam, que sais-je encore, qui utilisent :

    fastcgi_pass php5-fpm;

    Puis ensuite on peut imaginer un pool :

    [site1]
    user = www-site1
    group = www-site1
    listen = /var/run/php5-fpm-site1.sock
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    chdir = /

    avec

    upstream php5-fpm-site1 {
     server unix:/run/php5-fpm-site1.sock;
    }

    Puis un pool :

    [site2]
    user = www-site2
    group = www-site2
    listen = /var/run/php5-fpm-site2.sock
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    chdir = /

    avec

    upstream php5-fpm-site2 {
     server unix:/run/php5-fpm-site2.sock;
    }

    et un ou des sites utilisent :

    fastcgi_pass php5-fpm-site1;

    tandis qu'encore un autre ou d'autres sites utilisent :

    fastcgi_pass php5-fpm-site2;

    ...ne pas oublier de créer les utilisateurs, bien évidemment. ;)

    Personnellement, je crée naïvement dans nginx des petits fichiers nommés upstream-php5-fpm-site1.conf pour chaque pool qui contiennent la déclaration du socket, mais nommés comme précédemment.

    ce commentaire est sous licence cc by 4 et précédentes