Comment php reçoit-il la requête ?
Cet article décrit principalement plusieurs points
● Comment nginx transmet-il les requêtes à PHPFPM ?
● Que sont exactement CGI et FastCGI ? Jouet?
● Qu'est-ce que PHPFPM ? Qu'est-ce que ça fait ?
Description simple de la scène
Visitez un centre commercial construit avec php+nginx+mysql sur le navigateur et achetez un article.
Analyse (il y a deux ressources accessibles ici)
● Ressources statiques (quelques images, icônes du site Web, etc.)
● Dynamique ressources (Le prix des biens achetés, l'introduction du produit, etc.)
Le navigateur lance une requête--> traitement de distribution du serveur web (nginx)--> le processus approximatif)
Comment nginx distribue-t-il les requêtes ?
Lorsque l'utilisateur lance une requête (le navigateur demande le port 80 par défaut), nginx écoute le port 80 et configure la correspondance régulière via nginx s'il appartient à une ressource statique. ressource statique, le fichier sera renvoyé et la requête se terminera. S'il s'agit d'une ressource dynamique et que le script php de la requête correspond via des expressions régulières, il distribuera la requête à PHPFPM pour traitement via le module nginx ngx_http_fastcgi_module, puis renverra le résultat après traitement.
Quantity CGI
CGI est une spécification permettant aux serveurs Web d'exécuter des programmes externes. Cela signifie que vous pouvez communiquer avec votre programme via CGI, via le format standard CGI. Votre programme peut interagir avec le navigateur.
(Une simple compréhension de CGI est un protocole qui stipule comment certaines choses doivent être transmises, comment votre programme les accepte et les traite, etc.)
● PHP-CGI
PHP-CGI est une version d'implémentation du protocole CGI php. PHP-CGI lancera un processus pour chaque requête et se terminera une fois le traitement terminé. (Ce modèle est appelé fork-and-execute). Ce modèle n'est pas en phase avec le trafic à grande échelle actuel, il s'est donc retiré de la scène de l'histoire.
● FastCGI
FastCGI est une version mise à niveau de CGI. Il démarrera un processus maître à l'avance pour lire le fichier de configuration, puis lancera plusieurs processus de travail pour attendre les connexions. Après écoute de la demande, un processus de travail est alloué à un traitement spécifique. Cela améliore considérablement les performances du programme. (FastCGi gérera le processus et ne le détruira pas facilement une fois le traitement terminé. CGI créera un processus pour chaque demande et détruira le processus.)
● PHPFPM
Comme le meilleur langage dans le monde, il faut bien sûr suivre les tendances. Lorsqu'il a été découvert que PHP-CGI fonctionnait mal, le protocole FastCGI est apparu. PHP implémente donc une version php de FastCGI appelée PHPFPM (FastCGI Process Manager). Lorsque PHPFPM démarre, il démarre un processus maître et plusieurs processus de travail. Le processus maître écoute les demandes et les transmet au processus de travail pour traitement. Chaque processus de travail dispose d'un interpréteur php. Votre code a une copie dans chaque processus de travail. Le processus de travail est l'endroit où le code est réellement exécuté.
SO
PHPFPM écoute le port 9000, nginx correspond au fichier php et transmet la requête à PHPFPM. Une fois que le maître PHPFPM a écouté la requête, il est affecté au travail pour le traitement (chaque processus de travail possède un interpréteur php). Lorsque PHPFPM est démarré, le processus de travail a déjà chargé la configuration et le code que vous avez écrit. Par conséquent, le processus de travail exécute immédiatement la demande après l'avoir reçue, puis renvoie le résultat.
module ngx_http_fastcgi_module
Lorsque le navigateur demande web_server, il s'agit du protocole http ou du protocole https, mais PHPFPM ne comprend pas que dois-je faire ? Ici, nginx fournit un ngx_http_fastcgi_module, qui mappe les requêtes http ou https aux requêtes FastCGI. De cette façon, le programme php peut interagir avec l'utilisateur.
C'est purement ma compréhension personnelle, veuillez signaler s'il y a une erreur.
Recommandations associées : [Tutoriel PHP]
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!