Différences et inconvénients entre: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM

73

Il y a peu de "wrappers" php différents (?). Quelles sont les différences entre eux? J'ai essayé de google, mais je n'arrive pas à trouver des informations. (mod-php n'est pas googleable).

Pourquoi pourrais-je choisir un sur un autre?

Gacek
la source

Réponses:

141

Les questions sont un peu étranges, il n'est pas clair si vous ne demandez que PHP ou si votre question est plus générale.

Je vais vous donner un bref aperçu du côté de PHP.

Tout d'abord, les deux protocoles:

  • Les scripts CGI permettent d'exécuter un script côté serveur lorsqu'une requête HTTP est reçue. cela n'a rien à voir avec PHP

  • FastCGI est un "meilleur CGI" - on sait que CGI est lent, Fast CGI est une approche différente avec des résultats beaucoup plus rapides; cela n'a rien à voir avec PHP.

Maintenant, les choses liées PHP:

  • mod_php exécute un PHP en tant que module Apache - la requête PHP est exécutée sous un processus Apache avec tout ce qui va avec - les processus Apache sont définis par la configuration Apache, PHP est exécuté avec l'autorisation Apache, etc.

  • PHP-FPM est l'implémentation FastCGI de PHP; PHP-FPM fonctionne en tant que serveur FastCGI autonome et Apache se connecte au serveur à l'aide du module Apache, généralement mod_fcgid ou mod_fastcgi; Personnellement, je pense que cela est bien mieux que d’exécuter en tant que mod_php, mais cela dépend de vos besoins et est aussi un peu plus complexe; dans cette configuration, les autorisations, les processus liés aux tâches et tout est exécuté sous configuration PHP, utilisateur PHP, etc. & Apache se connecte à PHP comme à un serveur; Dans cette configuration, il est également possible d'avoir un pool de serveurs PHP et d'avoir un serveur PHP sur une machine physiquement différente d'Apache. Ils disent que c'est presque aussi rapide que d'utiliser le module d'Apache et qu'il y a des avantages à un meilleur contrôle de la configuration de PHP.

  • SuPHP - cela a été principalement utilisé pour résoudre certains problèmes de mod_php liés aux permissions; with mod_php Les scripts PHP sont exécutés sous l'utilisateur / groupe Apache; mod_suphp peut exécuter les scripts dans différents utilisateurs; Je ne l'ai jamais utilisé, PHP-FPM devrait maintenant être un meilleur choix

Donc en gros:

  • CGI, Fast-CGI sont des protocoles; CGI est lent, Fast-CGI est beaucoup plus rapide
  • mod_php (avec soulignement) et PHP-FPM sont deux méthodes de base pour exécuter PHP
  • mod_SuPHP est similaire à mod_php mais peut changer l'utilisateur / le groupe sous lequel le processus est exécuté.
Aleš Krajník
la source
Peut-être que je vais clarifier ce qui m'a inspiré pour cette question. Je viens de recevoir un VPS avec un panneau ISPConfig (panneau Opensource pour les pages d'administration). Là, je peux choisir une version de PHP pour serveur / côté. Et ceux-ci sont énumérés là. Donc, fondamentalement, il semble que choisir PHP-FPM choisisse FastCGI avec des "wrappers" supplémentaires?
Gacek
12
Je ne sais pas ce que le panneau ISPConfig utilise réellement, mais PHP exécuté en tant que PHP-FPM signifie que PHP démarrera son propre serveur FastCGI intégré et écoutera les demandes via le protocole FastCGI. Le serveur HTTP recevra les requêtes d’Internet et les traitera comme d’habitude. Si une page doit être exécutée avec PHP, la requête sera transmise au protocole FastCGI à PHP et le résultat sera renvoyé au navigateur. Pensez à cela comme à un serveur HTTP entre navigateur et serveur PHP (PHP-FPM FastCGI). PHP-FPM est une implémentation du protocole FastCGI.
Aleš Krajník
@ AlešKrajník, merci pour cette explication détaillée. Eh bien, j'ai essayé d'exécuter php en tant qu'utilisateur / groupe séparé. J'ai donc commencé avec Su-exec et me suis retrouvé dans une impasse, puis deux personnes ont recommandé php-fpm, ce que vous avez expliqué. Cependant, je ne comprends toujours pas les modules mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi et leur fonctionnement avec php-fpm. J'ai aussi lu dans un autre tutoriel qu'ils utilisaient mod_fcgid et mod_proxy_fcgi. Comment lutter pour comprendre comment toutes les pièces sont réunies.
David Okwii
1
@landed Le binaire PHP-FPM fait partie de chaque distribution PHP depuis la version 5.3.3 ou 5.4.0 (vérifiez ceci: php-fpm.org ), pour cette version PHP spécifique.
Aleš Krajník
2
php-fpm consiste à supprimer les coûts d'initialisation. php-fpm démarre au préalable plusieurs processus php, prêt à traiter les demandes et à les laisser dormir jusqu'à ce que les demandes arrivent - ce qui signifie qu'il peut répondre beaucoup plus rapidement que le cgi traditionnel, car php est déjà en cours d'exécution lorsque les demandes arrivent, par opposition au CGI traditionnel, lorsqu'un nouveau processus php est lancé pour chaque requête, php-fpm n'arrête pas le processus php après le traitement des requêtes, mais continue de réutiliser les mêmes processus. - avec 0 surcharge de processus de démarrage et d'arrêt, php-fpm répond beaucoup plus rapidement. le démarrage et l'arrêt des processus prennent du temps.
hanshenrik