Dans cet article nous allons expliquer et comparer les modes d’exécution CGI, FastCGI et module Apache. Nous verrons dans chacun des cas les implémentations disponibles. Cela vous permettra d’y voir plus clair et de faire le choix le plus approprié selon votre besoin 🙂
Sommaire
CGI vs Fast-CGI vs module Apache
Ces 3 méthodes vont décrire la façon dont les scripts PHP seront exécutés par le serveur.
L’utilisation de module Apache se caractérise par l’intégration de l’interpréteur PHP dans chaque process Apache. De cette manière, chaque Worker Apache pourra exécuter des scripts PHP. L’implémentation la plus courante est mod_PHP.
CGI et FastCGI sont des protocoles indépendants de PHP. Ils vont indiquer comment le serveur va exécuter un script après une requête HTTP.
En deux mots, CGI améliore la sécurité par rapport au mod_PHP car il isole l’interprétation du code PHP dans un processus distinct. Il est connu pour être très lent et c’est pourquoi il n’est quasiment plus utilisé de nos jours.
FastCGI améliore de façon importante les performances du protocole CGI (d’où son nom). Il est également moins gourmand en ressource que mod_PHP. Son implémentation la plus répandue est PHP-FPM.
Tableau comparatif
Dans ce tableau j’ai choisi les 3 implémentations les plus courantes de chaque type de handler.
Type de handler
Module Apache
CGI
FastCGI
Implémentation la plus courante
mod_PHP(aussi appelé DSO)
CGI
PHP-FPM
Avantages
Facile à installer, à configurer et à mettre à jour.
Plus de sécurité que mod_PHP.
Compatible pour de nombreux types de serveur web. Plus de sécurité que mod_PHP comme les process sont isolés du serveur web. Le propriétaire des fichiers créés par PHP peut être spécifié. Il est possible d’avoir plusieurs versions de PHP cohabitants sur le même serveur.
Inconvénients
Disponible uniquement pour Apache. mod_PHP uniquement : Les fichiers créés par PHP ont les droits du process Apache ce qui pose généralement des difficultés lors de l’édition de ces fichiers. Consommation de RAM d’Apache plus importante.
Lent pour les sites à fort trafic.
Plus difficile à configurer que mod_PHP.
Alternative
suPHP (permet une meilleur gestion des droits et une amélioration de la sécurité)
On peut entendre parler de PHP FastCGI mais il n’est plus disponible, il a été remplacé par PHP-FPM. Des modules Apaches permettent d’utiliser FastCGI comme: mod_fcgid. Il est néanmoins conseillé à l’heure actuelle d’utiliser PHP-FPM.
Tableau comparatif FastCGI vs CGI vs Module Apache
Lequel choisir ?
Comme souvent à la fin d’un comparatif la réponse est “ça dépend des cas”.
Pour un site avec peu de trafic et qui n’a pas de besoins particuliers en sécurité mod_PHP fera l’affaire. Des alternatives ont émergé pour pallier à ses faiblesses (notamment suPHP).
Malgré tout la fondation Apache a l’air de pousser vers PHP-FPM. Voici deux extraits de la documentation trouvée sur l’espace confluence de la fondation Apache, dans le guide d’installation de PHP-FPM :
“This means that we can now run secure, fast, and dependable PHP code using only the stock apache httpd and php.net releases; no more messing around with suphp or suexec – or, indeed, mod_php.’ – consulté sur https://cwiki.apache.org/confluence/display/HTTPD/PHP-FPM le 07/05/2020
ou
“Using mod_php in most cases is not a viable solution, since it introduces scalability issues with the added RAM requirement for each httpd process.”
Mon avis personnel après ces recherches est que l’implémentation PHP-FPM est en voie de devenir un standard de part ses performances sur des trafics de toute taille et son gain en matière de sécurité.
Introduction
JaCoCo est un outil très connu dans le monde Java qui permet de générer des rapports de code coverage au format xml et html.
L’intérêt sera souvent de donner le rapport au format xml à d’autres outils (Codecov ou Sonar par exemple) pour suivre le code coverage de votre projet.
Nous allons voir pas à pas comment configurer Jacoco pour qu’il génère un rap...
Introduction
Dans nos applications, il y a souvent des objets qui dépendent les uns des autres (un Service avec des Repository par exemple). Si on devait satisfaire ces dépendances “à la main”, on devrait les instancier, vérifier que ça n’ait pas ...
Introduction
Chiffrer et déchiffrer des informations est un besoin qu’on rencontre souvent dans nos projets et Java donne nativement une palette d’outils pour y arriver. On va voir dans cet article comment réaliser ces deux opérations via un cas prati...
Il n'est pas évident de savoir quelle est la version de maven minimale conseillée pour une version de Java car la documentation maven de le précise pas.
On sait quelle est la version minimale de JDK pour chaque version "Maven 3.8+ requires JDK 1.7 or above t...