Il existe de nombreux articles sur Internet sur la façon de configurer Nginx + FPM, mais ils sont plutôt d'un point de vue opérationnel, nous expliquant comment le faire, mais pas pourquoi nous devrions le faire. relation entre Nginx et FPM En partant du mécanisme de travail, nous discutons des principes derrière la configuration, afin que nous puissions vraiment comprendre comment Nginx et PHP fonctionnent ensemble.
Pour parler de la façon dont Nginx et PHP fonctionnent ensemble, il faut d'abord parler des deux protocoles CGI (Common Gateway Interface) et FastCGI.
CGI est un protocole d'interaction entre le serveur Web et le langage d'arrière-plan. Avec ce protocole, les développeurs peuvent utiliser n'importe quel langage pour traiter les requêtes du serveur Web et générer dynamiquement du contenu. Mais CGI présente un défaut fatal : chaque requête doit être intégrée à un nouveau processus. Avec l'essor du Web, la concurrence élevée est devenue de plus en plus la norme, et cette méthode inefficace ne peut évidemment pas répondre à la demande. C'est ainsi qu'est né FastCGI et que CGI s'est rapidement retiré de la scène de l'histoire. FastCGI, comme son nom l'indique, est un CGI plus rapide. Il permet de traiter plusieurs requêtes en un seul processus, au lieu de terminer le processus directement après le traitement d'une requête. Les performances ont été considérablement améliorées.
Quant à FPM (FastCGI Process Manager), il s'agit d'une implémentation de FastCGI, et tout serveur Web implémentant le protocole FastCGI peut communiquer avec lui. FPM fournit également quelques améliorations par rapport au standard FastCGI. Pour plus de détails, veuillez vous référer à la documentation officielle : PHP : Installation FPM.
FPM est un gestionnaire de processus PHP, comprenant le processus maître et le processus de travail : il n'y a qu'un seul processus maître, qui est chargé d'écouter le port et de recevoir les requêtes du serveur Web, alors qu'il existe généralement plusieurs processus de travail (En particulier, le nombre est configuré en fonction des besoins réels). Chaque processus contient un interpréteur PHP intégré, où le code PHP est réellement exécuté. L'image ci-dessous est la situation du processus de fpm sur ma machine locale, 1 processus maître et. 3 processus de travail :
Depuis le FPM jusqu'à la réception de la demande et son traitement, le processus spécifique est le suivant :
Le processus maître reçoit la demande
Le processus maître attribue un processus de travail spécifique en fonction de la configuration pour gérer la demande. S'il n'y a pas de processus disponible, une erreur est générée. renvoyé. C'est pourquoi nous rencontrons souvent des erreurs 502 lorsque nous travaillons avec Nginx Reason.
Le processus de travail traite la demande. S'il expire, une erreur 504 est renvoyée
Le traitement de la demande est terminé et le résultat est renvoyé
Il s'agit du processus de réception et de traitement des requêtes par FPM, alors comment Nginx envoie-t-il les requêtes à FPM ? Cela doit être expliqué à partir du niveau Nginx.
Nous savons que Nginx n'est pas seulement un serveur Web, mais aussi un puissant serveur proxy. En plus de proxyer les requêtes http, il peut également proxy de nombreuses autres requêtes de protocole, y compris le protocole fastcgi lié à fpm dans cet article. . Afin de permettre à Nginx de comprendre le protocole fastcgi, Nginx fournit le module fastcgi pour mapper les requêtes http aux requêtes fastcgi correspondantes.
Le module fastcgi de Nginx fournit l'instruction fastcgi_param pour gérer principalement ces relations de mappage. Vous trouverez ci-dessous un fichier de configuration de Nginx sous Ubuntu. Sa tâche principale est de traduire les variables de Nginx en variables compréhensibles en PHP. .
De plus, une chose très importante est la commande fastcgi_pass. Cette commande est utilisée pour spécifier l'adresse où le processus fpm écoute. Nginx traduira toutes les requêtes php en requêtes fastcgi puis les enverra à cette adresse. Voici un simple fichier de configuration Nginx fonctionnel :
Dans ce fichier de configuration, nous créons un nouvel hôte virtuel, écoutant sur le port 80, et le répertoire racine Web est /home/rf/projects/wordpress. Ensuite, nous utilisons la directive location pour transmettre toutes les requêtes se terminant par .php au module fastcgi pour traitement, transmettant ainsi toutes les requêtes PHP à fpm pour traitement, complétant ainsi la boucle fermée de Nginx à fpm.
Désormais, l'ensemble du processus de communication entre Nginx et FPM devrait être plus clair.
Recommandations associées :
php utilise php-fpm pour redémarrer et arrêter la commande d'opération
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!