Comment configurer Apache HTTP avec MPM Event et PHP-FPM sur FreeBSD 12.0

L’auteur a sélectionné le Open Internet / Free Speech Fund pour recevoir un don dans le cadre du https://do.co/w4do-cta Programme [Write for DOnations] .

introduction

Le serveur Web Apache HTTP a évolué au fil des années pour fonctionner dans différents environnements et répondre à différents besoins. Comme tout serveur Web, Apache HTTP doit résoudre un problème important, à savoir comment gérer différents processus afin de répondre à une demande de protocole http. Cela implique l’ouverture d’un socket, le traitement de la demande, le maintien de la connexion ouverte pendant un certain temps, la gestion des nouveaux événements se produisant via cette connexion et le renvoi du contenu produit par un programme créé dans un langage particulier (tel que PHP, Perl ou Python). . Ces tâches sont effectuées et contrôlées par un Multi-Processing Module (MPM).

Apache HTTP est livré avec trois MPM différents:

  • * Pré-connexion *: Un nouveau processus est créé pour chaque connexion entrante atteignant le serveur. Chaque processus étant isolé des autres, aucune mémoire n’est partagée entre eux, même s’ils effectuent des appels identiques à un moment donné de leur exécution. C’est un moyen sûr d’exécuter des applications liées à des bibliothèques qui ne prennent pas en charge les applications ou les bibliothèques généralement plus anciennes.

  • * Worker *: un processus parent est chargé de lancer un pool de processus enfants, dont certains sont à l’écoute de nouvelles connexions entrantes et d’autres servent le contenu demandé. Chaque processus est threadé (un seul thread peut gérer une connexion) afin qu’un processus puisse gérer plusieurs demandes simultanément. Cette méthode de traitement des connexions encourage une meilleure utilisation des ressources, tout en maintenant la stabilité. Ceci est le résultat du pool de processus disponibles, qui a souvent des threads libres disponibles prêts à servir immédiatement de nouvelles connexions.

  • * Événement *: Basé sur worker, ce MPM va encore plus loin en optimisant la façon dont le processus parent planifie les tâches des processus enfants et des threads associés à ceux-ci. Une connexion reste ouverte pendant 5 secondes par défaut et se ferme si aucun nouvel événement ne se produit. Il s’agit de la valeur par défaut de la directive keep-alive, qui conserve le thread qui lui est associé. Event MPM permet au processus de gérer les unités d’exécution de sorte que certaines unités d’exécution soient libres de gérer les nouvelles connexions entrantes, tandis que d’autres sont maintenues liées aux connexions actives. Permettre la redistribution des tâches attribuées aux threads permettra une meilleure utilisation des ressources et des performances optimales.

Le module MPM Event est un module de multitraitement rapide disponible sur le serveur Web HTTP Apache.

PHP-FPM est le gestionnaire de processus FastCGI pour PHP. Le protocole FastCGI est basé sur la CGI (Common Gateway Interface), un protocole situé entre les applications et les serveurs Web comme Apache HTTP. Cela permet aux développeurs d’écrire des applications séparément du comportement des serveurs Web. Les programmes exécutent leurs processus de manière indépendante et transmettent leur produit au serveur Web via ce protocole. Chaque nouvelle connexion nécessitant un traitement par une application créera un nouveau processus.

En combinant l’événement MPM dans Apache HTTP avec PHP FastCGI Process Manager (PHP-FPM), un site Web peut se charger plus rapidement et gérer un plus grand nombre de connexions simultanées tout en utilisant moins de ressources.

Dans ce didacticiel, vous allez améliorer les performances de https://www.digitalocean.com/community/tutorials/how-to-install-an-apache-mysql-and-php-famp-stack-on-freebsd-12-. 0 [Pile FAMP] en ​​modifiant le module de traitement multiple par défaut de pré-fork en événement et en utilisant le gestionnaire de processus PHP-FPM pour gérer le code PHP à la place du classique + mod_php + dans Apache HTTP.

Conditions préalables

Avant de commencer ce guide, vous aurez besoin des éléments suivants:

Étape 1 - Changer le module de traitement multiple

Vous commencerez par rechercher la directive pre-fork dans le fichier + httpd.conf. Il s’agit du fichier de configuration principal pour HTTP Apache dans lequel vous pouvez activer et désactiver des modules. Vous pouvez modifier et définir des directives telles que le port d’écoute sur lequel Apache HTTP servira le contenu ou l’emplacement du contenu à afficher dans ce fichier.

Pour effectuer ces modifications, vous utiliserez la ligne numérique + nl +, le programme, avec l’indicateur + -ba + pour compter et les lignes numériques de sorte que rien ne soit incompatible ultérieurement. Combinée à + ​​grep +, cette commande comptera d’abord toutes les lignes du fichier spécifié dans le chemin, puis une fois terminée, elle recherchera la chaîne de caractères recherchée.

Exécutez la commande suivante pour que le programme + nl + traite et numérote les lignes dans + httpd.conf +. Ensuite, + grep + traitera la sortie en recherchant la chaîne de caractères donnée + 'mod_mpm_prefork' +:

nl -ba /usr/local/etc/apache24/httpd.conf | grep 'mod_mpm_prefork'

En sortie, vous verrez quelque chose de similaire à:

Output  LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so

Permet de modifier la ligne avec votre éditeur de texte. Dans ce tutoriel, vous utiliserez + vi +, l’éditeur par défaut de FreeBSD:

sudo vi + /usr/local/etc/apache24/httpd.conf

Ajoute un symbole + # + au début de la ligne pour que cette ligne soit commentée, comme ceci:

/usr/local/etc/apache24/httpd.conf

...
# LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
...

En ajoutant le symbole + # +, vous avez désactivé le module MPM de pré-branchement.

Vous trouverez maintenant la directive event dans le même fichier + httpd.conf.

nl -ba /usr/local/etc/apache24/httpd.conf | grep mpm_event

Vous verrez une sortie semblable à celle-ci:

Output...
 #LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
...

Vous allez maintenant supprimer le symbole + # + en ligne pour activer le MPM d’événement:

sudo vi + /usr/local/etc/apache24/httpd.conf

La directive va maintenant se lire comme suit:

/usr/local/etc/apache24/httpd.conf

...
LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
...

Maintenant que vous avez changé la configuration du pré-branchement MPM en événement, vous pouvez supprimer le paquet + mod_php73 + qui connecte le processeur PHP à Apache HTTP, car il n’est plus nécessaire et interférera s’il reste sur le système:

sudo pkg remove -y mod_php73

Assurez-vous que la configuration est correcte en exécutant la commande suivante à tester:

sudo apachectl configtest

Si vous voyez + Syntax OK + dans votre sortie, vous pouvez redémarrer le serveur HTTP Apache:

sudo apachectl restart

Vous avez fait passer le MPM de pre-fork à event et supprimé la connexion du module + mod_php73 + PHP vers Apache HTTP. Dans l’étape suivante, vous allez installer le module PHP-FPM et configurer Apache HTTP afin qu’il puisse communiquer avec PHP plus rapidement.

Étape 2 - Configuration d’Apache HTTP pour utiliser le gestionnaire de processus FastCGI

FreeBSD a plusieurs versions de PHP supportées que vous pouvez installer via le gestionnaire de paquets. Sur FreeBSD, différents fichiers binaires des différentes versions disponibles sont compilés au lieu d’en utiliser un seul comme le sont la plupart des distributions GNU / Linux proposées dans leurs référentiels par défaut. Pour suivre les meilleures pratiques, vous utiliserez la version prise en charge, que vous pouvez consulter à l’adresse Page de la page des versions prises en charge par PHP].

Dans cette étape, vous allez ajouter PHP-FPM en tant que service en cours pour démarrer au démarrage. Vous allez également configurer Apache HTTP pour qu’il fonctionne avec PHP en ajoutant une configuration dédiée pour le module et en activant d’autres modules dans + httpd.conf +.

Tout d’abord, vous ajouterez + 'php_fpm_enable = YES' + au fichier + / etc / rc.conf + pour que le service PHP-FPM puisse démarrer. Vous ferez cela en utilisant la commande + sysrc +:

sudo sysrc php_fpm_enable="YES"

Vous allez maintenant ajouter le module + php-fpm + dans le répertoire du module Apache. Il est donc configuré pour être utilisé par Apache HTTP. Créez le fichier suivant pour le faire:

sudo vi /usr/local/etc/apache24/modules.d/030_php-fpm.conf

Ajoutez ce qui suit dans + 030_php-fpm.conf +:

/usr/local/etc/apache24/modules.d/030_php-fpm.conf

<IfModule proxy_fcgi_module>
   <IfModule dir_module>
       DirectoryIndex index.php
   </IfModule>
   <FilesMatch "\.(php|phtml|inc)$">
       SetHandler "proxy:fcgi://127.0.0.1:9000"
   </FilesMatch>
</IfModule>

Cela indique que si le module + 'proxy_fcgi' + est activé ainsi que le + 'dir_module' +, tous les fichiers traités correspondant aux extensions entre parenthèses doivent être gérés par le gestionnaire de processus FastCGI s’exécutant sur la machine locale via le port + 9000 + -as si la machine locale était un serveur proxy. C’est là que le module PHP-FPM et l’interconnexion HTTP Apache. Pour ce faire, vous activerez d’autres modules au cours de cette étape.

Pour activer le module proxy, vous devez d’abord le rechercher dans le fichier + httpd.conf +:

nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy.so

Vous verrez une sortie semblable à celle-ci:

Output...
#LoadModule proxy_module libexec/apache24/mod_proxy.so
...

Vous décommentez la ligne en supprimant le symbole + # +:

sudo vi + /usr/local/etc/apache24/httpd.conf

La ligne se présentera comme suit une fois modifiée:

/usr/local/etc/apache24/httpd.conf

...
LoadModule proxy_module libexec/apache24/mod_proxy.so
...

Vous pouvez maintenant activer le module FastCGI. Trouvez le module avec la commande suivante:

nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy_fcgi.so

Vous verrez quelque chose de semblable au suivant:

Output...
#LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
...

Décommentez maintenant la ligne comme vous l’avez déjà fait avec les autres modules:

sudo vi + /usr/local/etc/apache24/httpd.conf

Vous laisserez la ligne comme suit:

/usr/local/etc/apache24/httpd.conf

...
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
...

Une fois cette opération effectuée, vous lancerez le service PHP-FPM:

sudo service php-fpm start

Et vous allez redémarrer Apache pour qu’il charge les dernières modifications de configuration intégrant le module PHP:

sudo apachectl restart

Vous avez installé le module PHP-FPM, configuré HTTP pour fonctionner avec Apache HTTP, activé les modules nécessaires au fonctionnement du protocole FastCGI et démarré les services correspondants.

Maintenant qu’Apache a activé le module Event MPM et que PHP-FPM est présent et en cours d’exécution, il est temps de vérifier que tout fonctionne comme prévu.

Étape 3 - Vérification de votre configuration

Afin de vérifier que les modifications de configuration ont été appliquées, vous devez effectuer des tests. Le premier vérifiera le module de traitement multiple utilisé par Apache HTTP. La seconde vérifiera que PHP utilise le gestionnaire FPM.

Vérifiez le serveur HTTP Apache en exécutant la commande suivante:

sudo apachectl -M | grep 'mpm'

Votre sortie sera comme suit:

Outputmpm_event_module (shared)

Vous pouvez répéter la même chose pour le module proxy et FastCGI:

sudo apachectl -M | grep 'proxy'

La sortie montrera:

Outputproxy_module (shared)
proxy_fcgi_module (shared)

Si vous souhaitez voir la liste complète des modules, vous pouvez supprimer la deuxième partie de la commande après + -M +.

Il est maintenant temps de vérifier si PHP utilise le gestionnaire de processus FastCGI. Pour ce faire, vous allez écrire un très petit script PHP qui vous montrera toutes les informations relatives à PHP.

Exécutez la commande suivante pour écrire un fichier nommé comme suit:

sudo vi /usr/local/www/apache24/data/info.php

Ajoutez le contenu suivant dans le fichier info.php:

info.php

<?php phpinfo(); ?>

Maintenant, visitez l’URL de votre serveur et ajoutez + info.php + à la fin, comme suit: + http: /// info.php +.

L’entrée de l’API du serveur sera * FPM / FastCGI *.

image: https: //assets.digitalocean.com/articles/MPMEvent/FastCGIPHP.png [PHP Afficher l’entrée de l’API du serveur FPM / FastCGI]

N’oubliez pas de supprimer le fichier + info.php après cette vérification afin qu’aucune information sur le serveur ne soit divulguée publiquement.

sudo rm /usr/local/www/apache24/data/info.php

Vous avez vérifié l’état de fonctionnement du module MPM, les modules qui gèrent le FastCGI et le traitement du code PHP.

Conclusion

Vous avez optimisé votre pile FAMP d’origine. Ainsi, le nombre de connexions permettant de créer de nouveaux processus HTTP Apache a augmenté, PHP-FPM gérera le code PHP de manière plus efficace et l’utilisation globale des ressources s’est améliorée.

Voir le projet de serveur HTTP Apache documentation pour plus d’informations sur les différents modules et les projets associés.