Cet article présente l'analyse de cgi, fastcgi, php-cgi et php-fpm. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
Le serveur Web (comme nginx) n'est qu'un distributeur de contenu. Par exemple, siD'accord, CGI est un protocole et n'a rien à voir avec un processus ou quoi que ce soit. Alors, qu’est-ce que fastcgi ? Fastcgi est utilisé pour améliorer les performances des programmes CGI.est demandé, le serveur Web trouvera le fichier dans le système de fichiers et l'enverra au navigateur. Ce qui est distribué ici, ce sont des données statiques. D'accord, si la requête est maintenant
Lorsque le serveur web recevra la requête/index.html
, selon le fichier de configuration, nginx sait qu'il ne s'agit pas d'un fichier statique et doit être traité par l'analyseur PHP, alors il traitera simplement la requête et la remettra au PHP. analyseur. Quelles données Nginx transmettra-t-il à l'analyseur PHP ? L'URL doit être présente, la chaîne de requête doit être présente, les données POST doivent être présentes et l'en-tête HTTP doit être présent. Eh bien, CGI est le protocole qui stipule quelles données doivent être transmises et dans quel format elles doivent être transmises. le backend pour traiter la demande. Réfléchissez bien à la provenance des utilisateurs que vous utilisez dans votre code PHP./index.php
, il lancera le programme CGI correspondant, voici l'analyseur PHP. Ensuite, l'analyseur PHP analysera le fichier php.ini, initialisera l'environnement d'exécution, traitera la demande, renverra le résultat traité dans le format spécifié par CGI et quittera le processus. Le serveur Web renvoie ensuite les résultats au navigateur.
/index.php
Améliorez les performances, alors quels sont les problèmes de performances des programmes CGI ? "L'analyseur PHP analysera le fichier php.ini et initialisera l'environnement d'exécution", c'est tout. Le CGI standard effectuera ces étapes pour chaque requête (ne soyez pas fatigué ! Démarrer le processus est très fatiguant !), donc le temps de traitement à chaque fois sera relativement long. C'est évidemment déraisonnable ! Alors, comment Fastcgi fait-il ? Tout d'abord, Fastcgi démarrera un maître, analysera le fichier de configuration, initialisera l'environnement d'exécution, puis démarrera plusieurs travailleurs. Lorsqu'une demande arrive, le maître la transmet à un travailleur et peut immédiatement accepter la demande suivante. Cela évite la duplication du travail et est naturellement très efficace. Et lorsqu'il n'y a pas assez de Workers, le maître peut pré-démarrer plusieurs Workers selon la configuration et attendre. Bien sûr, lorsqu'il y a trop de Workers inactifs, certains seront arrêtés, ce qui améliore les performances et économise les ressources. Il s'agit de la gestion des processus de fastcgi.
cgi
L'interface de passerelle universelle, la norme d'interface entre les programmes externes et les serveurs Web, est le processus de transfert d'informations entre les programmes cgi et les serveurs Web
Chaque requête générera un processus cgi. Une fois le programme cgi exécuté, le processus se termine
Indépendant du serveur et du langage de programmation indépendant
FastCgi
FastCgi est comme un Cgi résident, il peut toujours exécuter ça, tant qu'il est activé, il n'y a pas besoin de bifurquer à chaque fois, et il prend également en charge l'informatique distribuée, c'est-à-dire que le programme FastCgi peut être exécuté sur un hôte autre que le serveur du site Web et accepter les requêtes d'autres serveurs du site Web
Peut gérer plusieurs requêtes en même temps time
Utilisation de la mémoire à long terme
php-cgi
gestionnaire de processus FastCGI officiel de php
Après avoir modifié php.ini, vous devez tuer php-cgi puis démarrer php.ini pour qu'il prenne effet. Impossible de redémarrer en douceur
La mémoire ne peut pas être allouée dynamiquement
php-fpm
Non officiel Le fastCgi Le gestionnaire de processus a été officiellement inclus à partir de php5.4 Lors de la compilation de php, vous n'avez besoin que de –enable-fpm pour activer php-fpm
qui peut redémarrer php en douceur
Processus de planification dynamique
Nginx est uniquement responsable du transfert de proxy inverse/de requête et n'est pas responsable de la gestion du processus php-cgi, donc Nginx est généralement utilisé avec php-fpm qui peut gérer le processus de travail (processus enfant) par lui-même Il faut faire attention De plus, php-fpm est un SAPI indépendant, qui ne gère pas php-cgi. Autrement dit, php-fpm n'a rien à voir avec php-cgi. php-fpm a un interpréteur php intégré. , et le sous-processus de php-fpm est forké tout seul. Oui, il n'appellera pas php-cgi si vous supprimez php-cgi dans le système, cela n'affectera pas le fonctionnement normal du service php-fpm. 🎜>
php-fpm est un processus de travail sous la configuration pm = statique. Permanent en arrière-plan, c'est-à-dire que si vous configurez 5 processus de travail pm.max_children = 5, alors lorsque le service php-fpm démarrera, il le fera. supprime automatiquement 5 processus enfants et reste en arrière-plan, et ne se fermera pas une fois le traitement de la demande terminé. Ne se fermera pas en cas d'inactivité Si vous utilisez une connexion persistante à la base de données dans un script php, ces 5 processus de travail seront également établis et maintenus. 5 connexions persistantes à la base de données pour réutiliser la connexion à la base de données lors du traitement de plusieurs requêtes afin d'éviter d'établir/libérer une connexion à la base de données pour chaque requête. Les connexions persistantes peuvent également se reconnecter automatiquement après un délai d'attente, ce qui est complètement transparent pour le script dans php-fpm. Le script doit uniquement spécifier l'utilisation de connexions persistantes au démarrage. Oui.
php-fpm fonctionne dans la configuration pm = dynamique [partie] pour résider en arrière-plan, c'est-à-dire pour maintenir un certain nombre de processus résidents. Lorsque le service est occupé, davantage de processus seront bifurqués, et certains processus le seront. être automatiquement arrêté lorsque le service est inactif. Renvoyez les ressources mémoire au système d'exploitation. Les fournisseurs d'hôtes virtuels devraient préférer cette méthode
En bref, le mode de fonctionnement de PHP-FPM est similaire au MPM préfork d'Apache, un mode statique. et un service de réseau multi-processus dynamique.
php-cgi est l'un des premiers gestionnaires fastcgi produit par PHP officiel et n'est pas pris en charge. Pour un redémarrage en douceur, si vous modifiez php.ini, vous devez supprimer le php-cgi d'origine et le redémarrer pour prendre effet. La planification dynamique des travailleurs n'est pas prise en charge et vous pouvez uniquement spécifier le nombre de travailleurs à démarrer ; au début.
php-fpm est un gestionnaire de processus fastcgi qui n'a été ajouté que dans la version 5.3.3. Il ajoute une fonction de planification dynamique, qui peut augmenter ou diminuer dynamiquement le nombre de processus de travail en fonction des changements dans la pression entrante des demandes ; prend en charge la commande reload pour permettre au processus de travail de terminer le redémarrage après la requête en cours et applique la nouvelle configuration php.ini.
php54 était une relation avant, Une autre relation après php54.
Avant php54, php-fpm (compilation tierce) est le gestionnaire, php-cgi est l'interprète
Après php54, php-fpm ( officiel Livré avec), modes maître et pool. php-fpm et php-cgi n'ont rien à voir l'un avec l'autre. php-fpm est à la fois interprète et gestionnaire
Site de référence https://www.zhihu.com/question/55835080
https://segmentfault .com /q/1010000000256516
Recommandations associées :
Illustration de la relation entre CGI, FastCGI et PHP-FPM
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!