Performance Apache, Nginx, Php-FPM, Mod-PHP

Si on en croit “le web”, Apache est un affreux logiciel lent et dépassé et nous devrions tous passer à Nginx avec php-FPM. Ainsi, la performance va exploser et notre site web va passer au 21ème siècle alors que nous étions au moyen-âge.

Je caricature à peine ce que je lis, et sincèrement ce discours est simpliste.

A mon humble avis, les gens qui ont des problèmes de performance avec Apache ont un seul problème, ils l’utilisent pour tout faire. Cas typique : Apache fait tourner un bon gros CMS sous Zend ou Symfony, le truc tourne bien jusqu’au jour où il y a un buzz social, et là Apache prend beaucoup de RAM car il y a 200 surfeurs simultanés : le serveur swap, bref ; ça rame.
L’utilisateur est ensuite passé à NGINX et depuis tout va bien. -> Apache c’est de la merde.

J’ai lu cette histoire 20 fois sur web. Analysons.

En terme de performance de compilation ; le setup Apache+ModPHP compile du PHP exactement à la même vitesse que NGINX+FastCGI/PHP5-FPM. En fait, Apache/ModPHP va même un poil plus vite. Donc pour ce qui est de la “performance PHP brute” (du temps qu’il faut a un seul surfeur pour que le code php qu’il demande soit interprété) ; il n’y a pas l’ombre d’une différence entre Apache et Nginx. De toute façon, ni l’un ni l’autre n’ont pour fonction de compiler du PHP.

Ensuite, de quelle version de Apache parle t’on. Apache n’est pas un monolithe qui n’a pas bougé depuis 10 ans. Il y a des différences profondes entre Apache 2.2 et 2.4, en particulier dans la gestion multi processus (en cas de charge parallèle importante). De nos jours, la différence entre Apache2.4 (mpm event/prefork) et NGINX est subtile. En réalité, Nginx surfe beaucoup sur un “spin” qui combine son aura de “truc russe sophistiqué” et de nombreux comparatifs qui lui sont favorables comparent en réalité mod-php et php-fpm (exemple). Le temps où Apache lançait un process pour chaque question qu’on lui pose est révolu depuis longtemps.

Apache dispose de nombreuses utilisations qui vont au delà du “LAMP”. On peut très bien configurer Apache en reverse proxy, en serveur de contenu statique, et d’autres choses. Hors si quelqu’un ajoute Mod-PHP a son Apache, c’est qu’on devrait lui demander de servir… Du PHP ! Et chaque process sera prêt pour cela. Il est évident que si votre serveur passe son temps à servir des images, du CSS, du JS, il perd son temps et sa RAM. Vous pouvez parfaitement configurer un autre serveur, même un autre Apache, pour cette fonction précise (servir du statique) et le gain en RAM en cas de buzz sera immédiat.

Ensuite, php-fpm tourne parfaitement sous Apache (alors qu’il était longtemps la seule façon de faire tourner PHP sous Nginx). Ainsi pendant une longue période les gens ont comparés Apache/Mod-PHP à Nginx/PHP-FPM. Je ne trouve guère de comparaison Apache-php-fpm contre nginx/php-fpm sur le web ; et c’est bien la seule qui aurait de l’intérêt. Mais les résultats seront quasiment identiques entre les plateformes à mon avis. Citons au passage cet article sur la configuration d’un Apache 2.4 dans un mode en tout point semblable à Nginx.

En résumé : 80% de ce que je lis sur le web

  1. Compare des pommes (mod-php) et des poires (php-fpm)
  2. Date de Mathusalem ( Apache 2.2 ! )
  3. S’évertue à utiliser mod-php pour servir du contenu statique en parallèle
  4. Considère que Apache est lent car effectivement, quand on lance 400 fois un process qui prend 100 Megas : le serveur devient lent.

Dans les cas pratiques : je pense que l’essentiel des problèmes peut être simplement résolu en arrêtant de solliciter Apache/Mod-php pour servir tout le contenu d’un site web, en le spécialisant à servir uniquement du php, et faire appel à un autre process pour servir le reste (images, css, js).

Pour ce qui à vraiment besoin de php-fpm (lien vers un autre de mes articles) ; Apache convient parfaitement ! Les avantages de NGINX sont plus réduits qu’on ne le pense, et d’autant plus réduits chaque jour car le produit est devenu commercial et s’évertue à conserver certaines options dans Nginx-Plus (qui coûte 2500 $).  Alors que Apache est un produit OpenSource qui ne réserve pas certaines de ses fonctionnalités à d’heureux élus fortunés.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *