GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer PHP-FPM avec NGINX

PHP-FPM (FastCGI Process Manager) est une alternative à l'implémentation FastCGI de PHP avec quelques fonctionnalités supplémentaires utiles pour les sites à fort trafic. C'est la méthode préférée de traitement des pages PHP avec NGINX et elle est plus rapide que les méthodes traditionnelles basées sur CGI telles que SUPHP ou mod_php pour exécuter un script PHP.

Le principal avantage de l'utilisation de PHP-FPM est qu'il utilise une quantité considérable de mémoire et de processeur en moins par rapport à toute autre méthode d'exécution de PHP. La principale raison est qu'il diabolise PHP, le transformant ainsi en un processus d'arrière-plan tout en fournissant un script CLI pour gérer les requêtes PHP.

Prérequis de configuration PHP-FPM NGINX

  • Vous pouvez ouvrir une session SSH sur votre système Ubuntu 18.04 en utilisant root ou un utilisateur activé sudo.
  • Vous avez déjà installé NGINX et PHP dans votre système Ubuntu 18.04.

Étapes de configuration de NGINX PHP-FPM

  • Installer PHP-FPM
  • Configurer le pool PHP-FPM
  • Configurer NGINX pour PHP-FPM
  • Tester la configuration PHP-FPM de NGINX

1. Installer PHP-FPM

Nginx ne sait pas comment exécuter son propre script PHP. Il a besoin d'un module PHP comme PHP-FPM pour gérer efficacement les scripts PHP. PHP-FPM, d'autre part, s'exécute en dehors de l'environnement NGINX en créant son propre processus. Par conséquent, lorsqu'un utilisateur demande une page PHP, le serveur nginx transmet la demande au service PHP-FPM à l'aide de FastCGI.

L'installation de php-fpm dans Ubuntu 18.04 dépend de PHP et de sa version. Consultez la documentation de PHP installé avant de procéder à l'installation de FPM sur votre serveur. En supposant que vous avez déjà installé la dernière version de PHP 7.3, vous pouvez installer FPM à l'aide de la commande apt-get suivante.


# apt-get install php7.3-fpm

Le service FPM démarrera automatiquement, une fois l'installation terminée. Vous pouvez le vérifier à l'aide de la commande systemd suivante :


# systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-02-17 06:29:31 UTC; 30s ago
     Docs: man:php-fpm7.3(8)
 Main PID: 32210 (php-fpm7.3)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 1152)
   CGroup: /system.slice/php7.3-fpm.service
           ├─32210 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
           ├─32235 php-fpm: pool www
           └─32236 php-fpm: pool www

2. Configurer le pool PHP-FPM

Le service php-fpm crée un pool par défaut dont la configuration (www.conf) se trouve dans /etc/php/7.3/fpm/pool.d dossier. Vous pouvez personnaliser le pool par défaut selon vos besoins. Mais c'est une pratique courante de créer des pools séparés pour avoir un meilleur contrôle sur l'allocation des ressources à chaque processus FPM.

De plus, la séparation du pool FPM leur permettra de s'exécuter indépendamment en créant son propre processus maître. Cela signifie que chaque application php peut être configurée avec ses propres paramètres de cache à l'aide de PHP-FPM. Une modification de la configuration d'un pool ne vous oblige pas à démarrer ou à arrêter le reste des pools FPM.

Créons un pool FPM pour exécuter efficacement une application PHP via un utilisateur distinct. Pour commencer, créez un nouvel utilisateur qui aura des droits exclusifs sur ce pool :


# groupadd wordpress_user
# useradd -g wordpress_user wordpress_user

Naviguez maintenant vers le répertoire de configuration FPM et créez un fichier de configuration à l'aide de votre éditeur de texte préféré comme vi :


# cd /etc/php/7.3/fpm/pool.d
# vi wordpress_pool.conf
[wordpress_site]
user = wordpress_user
group = wordpress_user
listen = /var/run/php7.2-fpm-wordpress-site.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
; Choose how the process manager will control the number of child processes. 
pm = dynamic 
pm.max_children = 75 
pm.start_servers = 10 
pm.min_spare_servers = 5 
pm.max_spare_servers = 20 
pm.process_idle_timeout = 10s

Les options de configuration FPM ci-dessus et leurs valeurs sont décrites ci-dessous.

  • [wordpress_site]  :le nom du pool et doit être unique parmi tous les noms de pool.
  • utilisateur et groupe  :L'utilisateur et le groupe sous lesquels le pool sera exécuté.
  • écouter :Le nom du fichier socket pour ce pool.
  • listen.owner et listen.group :Doit correspondre à l'utilisateur et au groupe sur lesquels NGINX s'exécute. Dans notre cas, il s'agit de www-data.
  • php_admin_value  :Permet de définir des valeurs de configuration php personnalisées.
  • php_admin_flag :Permet de définir des drapeaux booléens PHP.
  • pm  :les paramètres du gestionnaire de processus et la valeur sont dynamiques signifient que le nombre de processus enfants est défini dynamiquement en fonction des directives suivantes.
  • pm.max_children :Le nombre maximum d'enfants qui peuvent être en vie en même temps.
  • pm.start_servers  :Le nombre d'enfants créés au démarrage.
  • pm.min_spare_servers :Le nombre minimum d'enfants en état "inactif" (en attente de traitement). Si le nombre de processus inactifs est inférieur à ce nombre, des enfants seront créés.
  • pm.max_spare_servers :Le nombre maximum d'enfants en état d'inactivité (en attente de traitement). Si le nombre de processus inactifs est supérieur à ce nombre, certains enfants seront tués.
  • pm.process_idle_timeout :Le nombre maximal souhaité de processus serveur inactifs. Utilisé uniquement lorsque la valeur pm est définie sur dynamique.
  • Outre les paramètres ci-dessus, il est également possible de transmettre quelques variables d'environnement système au service php-fpm en utilisant quelque chose comme env['PHP_FOO'] = $bar .

    Par exemple, l'ajout des options suivantes dans le fichier de configuration ci-dessus définira le nom d'hôte et l'emplacement du dossier temporaire sur l'environnement PHP.

    
    ...
    ...
    env[HOSTNAME] = $HOSTNAME
    env[TMP] = /tmp
    ...
    ...
    

    En outre, les paramètres des gestionnaires de processus dans le fichier de configuration de pool ci-dessus sont définis sur dynamique. Choisissez un paramètre qui correspond le mieux à vos besoins.

    Les autres options de configuration du gestionnaire de processus sont :

  • Statique  :Un nombre fixe de processus PHP sera maintenu.
  • à la demande :Aucun enfant n'est créé au démarrage. Les enfants seront bifurqués lorsque de nouvelles requêtes seront reçues sur le serveur.

Une fois que vous avez terminé de créer le fichier de configuration ci-dessus, redémarrez le service fpm pour appliquer les nouveaux paramètres :


# systemctl start php7.3-fpm

Le pool FPM sera créé immédiatement pour servir les pages php. N'oubliez pas que vous pouvez créer un service systemd distinct en spécifiant le fichier de configuration FPM ci-dessus, ce qui vous permet de démarrer/arrêter ce pool sans affecter les autres pools.

3. Configurer NGINX pour PHP-FPM

Créez maintenant un bloc de serveur NGINX qui utilisera le pool FPM ci-dessus. Pour ce faire, éditez votre fichier de configuration NGINX et transmettez le chemin du fichier socket du pool en utilisant l'option fastcgi_pass à l'intérieur du bloc d'emplacement pour php.


server {
         listen       80;
         server_name  example.journaldev.com;
         root         /var/www/html/wordpress;

         access_log /var/log/nginx/example.journaldev.com-access.log;
         error_log  /var/log/nginx/example.journaldev.com-error.log error;
         index index.html index.htm index.php;

         location / {
                      try_files $uri $uri/ /index.php$is_args$args;
         }

         location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php7.2-fpm-wordpress-site.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
    }
}

Bloc serveur NGINX

Assurez-vous que le paramètre de configuration ci-dessus est syntaxiquement correct et redémarrez NGINX.


# nginx-t
# systemctl restart nginx

4. Tester la configuration PHP-FPM NGINX

Pour tester si le fichier de configuration NGINX ci-dessus utilise effectivement le pool FPM nouvellement créé, créez un fichier d'informations php à l'intérieur de la racine Web. J'ai utilisé /var/www/html/wordpress en tant que racine Web dans le fichier de configuration NGINX ci-dessus. Ajustez cette valeur en fonction de votre environnement.


# cd /var/www/html/wordpress
# echo "<?php echo phpinfo();?>" > info.php

Une fois que vous avez terminé de créer la page d'informations PHP, pointez-y votre navigateur Web préféré.

Vous remarquerez que la valeur de $_SERVER['USER'] et $_SERVER['HOME'] la variable pointe vers wordpress_user et /home/wordpress_user respectivement que nous avons défini précédemment dans le fichier de configuration FPM et confirme ainsi que le NGINX sert les pages php en utilisant notre pool FPM souhaité.

Test NGINX PHP-FPM

Résumé

Dans cet article, nous avons appris à installer php-fpm et à configurer des pools séparés pour différents utilisateurs et applications. Nous avons également appris à configurer un bloc serveur NGINX pour se connecter à un service PHP-FPM. PHP-FPM offre fiabilité, sécurité, évolutivité et rapidité ainsi que de nombreuses options de réglage des performances. Vous pouvez maintenant diviser le pool PHP-FPM par défaut en plusieurs pools de ressources pour servir différentes applications. Cela améliorera non seulement la sécurité de votre serveur, mais vous permettra également d'allouer les ressources du serveur de manière optimale !


Linux
  1. Comment configurer Nginx pour travailler avec PHP via PHP-FPM

  2. Comment configurer l'origine Cloudflare SSL avec Nginx

  3. Comment configurer des serveurs de journalisation distants avec rsyslog ?

  4. Comment activer Nginx avec PHP-FPM sur Plesk

  5. Comment installer PHP 7.4 avec Nginx sur Ubuntu 20.04

Comment installer WonderCMS sur Ubuntu 20.04 (avec Nginx)

Comment configurer Nginx avec SSL

Comment installer Nginx avec PHP-FPM sur Debian 11

Comment configurer NGINX sur un serveur CentOS 7

Comment configurer l'équilibrage de charge avec NGINX sur Jelastic Cloud

Comment installer et configurer Memcached avec Apache et PHP