web-dev-qa-db-fra.com

Quels sont les avantages et les inconvénients d'utiliser PHP en tant que module Apache ou FastCGI?

Mon VPS me donne le choix d’exécuter PHP en tant que module Apache ou FastCGI.

Comment doit-on prendre cette décision? Performance? Sécurité? Facilité d'utilisation? Compatibilité?

J'utilise PLESK.

7
nute

La liaison PHP en tant que module Apache HTTPD les rend inséparables.

Ce n'est pas sans problèmes:

En effet, beaucoup de bibliothèques PHP ne sont pas threadsafe , il est donc essentiel pour utiliser le module --- [prefork-mpm pour HTTPD 2.x en production afin de mettre en œuvre un site Web sans filetage et de pré-forgeage. serveur qui traite les demandes de la même manière que HTTPD 1..

Cependant, cette approche affecte fortement les performances, ce qui peut surcharger le processeur et la RAM, provoquant des délais d'attente et d'autres problèmes.

La page de manuel Apache Performance Tuning nous éclaire un peu plus sur les avantages et les inconvénients:

Le MPM prefork utilise plusieurs processus enfants avec un seul thread chacun. Chaque processus gère une connexion à la fois. Sur de nombreux systèmes, la vitesse de prefork est comparable à celle de travailleur, mais elle utilise plus de mémoire. La conception sans thread de Prefork présente des avantages par rapport à worker dans certaines situations: elle peut être utilisée avec des modules tiers non sécurisés pour les threads et il est plus facile de déboguer sur des plates-formes avec un support médiocre du débogage de thread.

Donc, IMHO, PHP avec FastCGI est plus approprié en production.

De plus, ma préférence va à mod_fastcgi plutôt que mod_fcgid car il offre davantage de fonctionnalités, telles que la possibilité de définir un gestionnaire de processus externe.

Quoi qu'il en soit, le module prefork-mpm ne sera plus nécessaire, et il sera enfin possible de transmettre le module module [worker-mpm beaucoup plus efficace; sauf que le processus de gestion est géré via un script Shell pour lancer l'exécutable php-cgi, ce qui n'est pas très pratique.

Heureusement, nous pouvons utiliser le FastCGI Gestionnaire de processus pour PHP (PHP-FPM) , un correctif populaire intégré nativement depuis PHP 5.3.. Malheureusement, si vous utilisez PHP 5.2.x, vous serez confiné au classique FastCGI.

Néanmoins, , il est essentiel de connaître les vulnérabilités possibles du mode CGI , comme indiqué à la page de manuel Configurations CGI et en ligne de commande :

Avertissement
Un serveur déployé en mode CGI est ouvert à plusieurs vulnérabilités possibles. Veuillez lire notre section sur la sécurité de CGI pour apprendre à vous défendre de telles attaques.

Vous pouvez consulter cet article de blog, qui contient un exemple d'utilisation pratique et qui a été d'une grande aide pour la rédaction de cette réponse:

php, fastcgi, fpm et Apache (français)
php, fastcgi et Apache fpm (anglais avec Google Translate)

4
Pascal Qyy

Non, c'est en fait un peu plus compliqué que ça. Si j'ai bien compris la question, lorsque Apache traite une requête, il charge toute la bibliothèque PHP (dans le cas où PHP est un module Apache). Même lors de l'exécution d'une demande de ressource statique. Donc, cela consomme beaucoup de mémoire.

L’autre solution est un serveur frontal https léger. Il exécutera la requête statique et transmettra la requête php à PHP-CGI.

Pour reprendre ceci:

  • Apache PHP Module: Simple, facile, standard, utilisable à 90%.
  • PHP-CGI: Performant quand il y a beaucoup de ressources statiques (images, images, etc.). Un peu plus compliqué à configurer, à entretenir.
1
iammichiel