107 votes

Différences et dis/advanages entre : Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM

Il existe plusieurs "wrappers" php différents ( ?). Quelles sont les différences entre eux ? J'ai essayé d'en chercher sur Google, mais je n'ai pas trouvé d'informations. (mod-php n'est pas googleable).

Pourquoi devrais-je en choisir un plutôt qu'un autre ?

196voto

Aleš Krajník Points 2431

CGI et FastCGI sont deux protocoles non spécifiques à PHP :

  • CGI scripts est un moyen d'exécuter un scripts côté serveur (pas seulement PHP !) lorsqu'une requête HTTP arrive. Dans cette configuration, le serveur web lance un nouveau processus CGI pour chaque requête entrante, ce qui entraîne un surcoût de performance important.

  • FastCGI est un "meilleur CGI" - pour remédier aux limites des CGI, le FastCGI fonctionne comme un serveur (TCP ou UNIX), de sorte que les ressources peuvent être réutilisées entre les requêtes.

Le serveur Web compatible avec PHP peut être configuré comme suit :

  • mod_php est un module Apache permettant d'exécuter PHP. Dans cette configuration, les requêtes PHP sont traitées par le processus Apache avec tout ce qui va avec : Les processus PHP sont définis dans la configuration d'Apache, PHP s'exécute sous l'utilisateur et les permissions d'Apache, etc.

  • PHP-FPM est l'implémentation FastCGI de PHP. Dans cette configuration, PHP-FPM fonctionne comme un serveur FastCGI autonome et Apache s'y connecte en utilisant des modules FastCGI, tels que mod_fcgid , mod_fastcgi o mod_proxy_fcgi (Apache 2.4+). Dans cette configuration, les permissions, les processus et tout le reste sont contrôlés par le serveur PHP-FPM. Les performances sont comparables à mod_php .

  • SuPHP - ce était utilisé pour remédier à certaines lacunes de mod_php liés aux permissions : avec mod_php Les scripts de PHP sont exécutés sous l'utilisateur/groupe Apache, mais mod_suphp peut exécuter les scripts sous un autre utilisateur. suPHP n'est plus maintenu et ne devrait pas être utilisé.

  • CGI/FastCGI - J'ai ajouté celui-ci suite à une question dans les commentaires. Sans connaître les détails de la configuration, PHP peut être exécuté comme serveur FastCGI en utilisant n'importe quelle autre implémentation FastCGI - comme expliqué dans une autre question . Je n'utilise pas cette configuration et ne vois aucun avantage par rapport à PHP-FPM.

  • CGI - PHP peut aussi être exécuté en tant que bon vieux CGI script, mais je ne peux pas imaginer un seul cas d'utilisation valable pour cela, à part la compatibilité avec certains environnements très dépassés.

En ce qui concerne les avantages et les inconvénients de ces différentes approches, je me limite à mod_php et PHP-FPM, couvrant deux cas d'utilisation principaux :

  • mod_php peut être utile dans certaines configurations Docker où vous souhaitez fournir un seul conteneur exécutant un serveur web PHP. Le fait que tout fonctionne comme un seul processus facilite la configuration du conteneur Docker. D'autre part, l'exécution du serveur PHP-FPM dans un seul conteneur avec un serveur web nécessiterait une orchestration des processus, soit avec supervisord Il s'agit d'une approche qui va à l'encontre des meilleures pratiques en matière d'écriture de conteneurs Docker.

  • PHP-FPM est une approche plus puissante qui sépare mieux les préoccupations, de sorte que le serveur PHP-FPM peut être configuré, (performant) et maintenu séparément du serveur web. Cela permet également d'exécuter le serveur PHP-FPM dans un pool ou sur une machine différente du serveur web. Comme il a été dit plus haut, pour les conteneurs Docker, il est recommandé d'utiliser des conteneurs PHP-FPM et de serveur web séparés, ce qui rend la configuration plus complexe (et plus puissante). L'approche de PHP-FPM est aussi la seule façon de faire avec nginx car le module PHP correspondant n'existe pas.

Ma mise en œuvre Docker des deux approches susmentionnées peut être consultée ici :

La mise en œuvre est conçue pour fonctionner avec certains de mes anciens et nouveaux projets dans mon cluster Kubernetes. N'hésitez pas à l'utiliser.

Donc, TLDR :

  • CGI et FastCGI sont des protocoles ; CGI est lent, FastCGI est beaucoup plus rapide.
  • mod_php et PHP-FPM sont les deux principaux moyens d'exécuter PHP.
  • mod_SuPHP est une approche qui a été utilisée pour aborder mod_php des lacunes. Il est obsolète et PHP-FPM devrait être utilisé à la place.

0 votes

Je vais peut-être préciser ce qui m'a inspiré cette question. Je viens d'obtenir un VPS avec un panneau ISPConfig (panneau Opensource pour les pages d'administration). Là, je peux choisir une version de PHP pour le serveur/le côté. Et celles-ci sont listées là. Donc, en gros, il semble que choisir PHP-FPM choisit FastCGI avec des "wrappers" supplémentaires ?

14 votes

Je ne sais pas ce que le panneau ISPConfig utilise réellement, mais PHP exécuté en tant que PHP-FPM signifie que PHP va démarrer son propre serveur FastCGI intégré et écouter les requêtes via le protocole FastCGI. Le serveur HTTP recevra les requêtes d'Internet, les traitera comme d'habitude et dans le cas où une page doit être exécutée en utilisant PHP, la requête sera transmise à PHP via le protocole FastCGI et le résultat sera renvoyé au navigateur. Imaginez que le serveur HTTP se trouve entre le navigateur et le serveur PHP (PHP-FPM FastCGI). PHP-FPM est une implémentation du protocole FastCGI.

1 votes

@AlešKrajník merci pour cette explication élaborée. J'ai essayé d'exécuter php en tant qu'utilisateur/groupe séparé. J'ai commencé avec Su-exec et je me suis retrouvé dans une impasse, puis quelques personnes m'ont recommandé php-fpm que vous avez expliqué. Cependant, je ne comprends toujours pas les modules mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi et comment ils fonctionnent avec php-fpm. J'ai également lu dans un autre tutoriel qu'ils utilisaient mod_fcgid et mod_proxy_fcgi. J'ai du mal à comprendre comment toutes ces pièces s'assemblent.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X