J'ai un nouveau serveur pour jouer, et je regarde une toile vierge. Je peux mettre tout ce que je veux dessus. Bien que je sois à l'aise avec Apache, j'entends beaucoup dire que nginx peut gérer beaucoup plus de trafic qu'Apache, avec des facteurs de 10, 100, voire plus. Non seulement c'est "beaucoup beaucoup plus rapide".
Lorsque je recherche des articles, je peux trouver beaucoup de choses sans lien avec Drupal. Ou, quand je rencontre un article lié à Drupal, c'est soit 1) le fichier de configuration de quelqu'un avec une tentative rapide pour expliquer comment le configurer, soit 2) c'est quelqu'un qui dit "non, n'utilisez pas nginx, utilisez Apache avec PHP fcgid "mais il n'y a jamais d'explication quant à pourquoi.
Donc, en ce qui concerne Drupal, quelle est la réalité ici?
Par exemple, je cherche quelque chose dans les lignes de cet article de 2bits.com . Ici, l'auteur a jeté un regard assez approfondi sur Apache mod_php vs Apache avec fcgid, en soupesant le pour et le contre de chacun, et a fourni une étude de cas pour illustrer l'impact dans le monde réel. Cet article contient suffisamment d'informations pour que je puisse prendre une décision éclairée quant à l'approche la mieux adaptée à ma situation.
Tandis que cet auteur compare mod_php à fcgid, je recherche le même type de regard complet et réaliste sur Apache vs Nginx.
N'importe qui est passé à Nginx et a été "époustouflé" par la différence qu'il fait par rapport à Apache? Même pour les environnements hautement optimisés qui utilisent déjà APC, Memcache et la mise en cache agressive comme Varnish, lorsque la seule variable qui change, remplace Apache par Nginx, fait suffisamment de différence en soi pour justifier des investissements dans cette nouvelle technologie alternative. ?
Le site qui ira sur ce serveur reçoit en moyenne 2 millions de VP par mois. Pile LAMP sous Cent OS 6. CPU à 4 cœurs avec 8 GIGS de RAM. Memcached et APC feront partie du mélange. Rien d’exceptionnel à propos de l’installation de Drupal - en gros vanilla 7 avec environ 50 modules.
la source
Réponses:
Strictement parlant, cela ne répond pas à la question que vous posez. J'espère que c'est utile quand même.
Apache / Nginx / Lighttpd / autre serveur Web. Est-ce que c'est celui que je choisis? En bref, non .
La réponse beaucoup plus longue:
Si et seulement si, vous avez un très grand pourcentage d’utilisateurs connectés, si vous vous souciez de la performance de votre serveur Web. Si vos utilisateurs sont anonymes, toute différence que vous pouvez théoriquement tirer de l'optimisation au niveau de ces couches est tout à fait irréprochable par rapport à une meilleure mise en cache de vos ressources. Si vos fichiers CSS ont des en-têtes de cache appropriés, l'UA ne les demandera même pas une seconde fois. C'est important. Si vous pouvez mettre en cache vos pages dans Varnish ou dans une solution logicielle similaire, vous devez afficher cette page en effectuant une recherche par hachage, puis en renvoyant une grande quantité de données directement à partir de la RAM. C'est important. Dans ces deux scénarios, le démon HTTP n'est jamais impliqué, PHP n'est pas invoqué. Drupal ne pas bootstrap. Aucun ensemble important de modules ne doit être chargé dans la RAM, aucune requête fastidieuse de la base de données n'est exécutée.
Lorsque vous effectuez un chargement complet de la page, à partir d'un cache froid, pour un utilisateur connecté, sur une page complexe; beaucoup de choses se passent. Oui, le serveur Web est impliqué dans le traitement de la demande entrante, la définition de certains en-têtes et le renvoi de la réponse. Mais le temps que cela prend n'est même pas pertinent dans le contexte où Drupal exécute un bootstrap complet et affiche sa réponse. Des centaines de requêtes de base de données pourraient être exécutées. La logique très complexe en PHP est évaluée par l'analyseur. Beaucoup de modules sont en cours de chargement dans la RAM. L’amélioration de la performance de l’une de ces choses est beaucoup plus susceptible d’apporter une contribution sérieuse à la performance.
Par souci d'argumentation: Disons que vous avez passé beaucoup de temps à optimiser vos performances.
Si vous avez beaucoup d'utilisateurs connectés et que vous avez résolu tous les problèmes ci-dessus, vous pouvez probablement faire la différence en réglant les performances ou en remplaçant votre serveur Web. Cependant, devinez quoi. Votre site est si complexe et les habitudes d'utilisation de vos utilisateurs sont uniques . Il n'y a pas de réponse générique. Vous devrez configurer tous les serveurs Web différents derrière un équilibreur de charge et voir comment ils se comportent, dans votre scénario .
Ce qui précède était une tentative logique de parvenir à la conclusion que l'optimisation du serveur Web par la performance de gestion du temps représente probablement une mauvaise utilisation du temps. J'aimerais bien que quelqu'un trouve des trous dans ce qui précède, j'apprendrais probablement quelque chose de nouveau grâce à cela. :)
Quelques autres notes:
$ wc -l $(find . -type f | grep -v "^\.git" | grep -v "^\.hphp/third_party") | sort -nr | head -n1
et j'ai trouvé qu'il consistait en 1.512.481 lignes de code. Cela représente un travail absolument insensé pour améliorer la vitesse de PHP. J'imagine que c'est parce que la vitesse de PHP compte beaucoup pour eux.la source
OK, même si cette question a déjà trouvé une réponse, je nécromancie encore une fois, principalement parce que je n'aime pas les implications de ces réponses sur le fait que cela ne fait aucune différence, et parce qu'en tant que développeur web, je déteste mettre en cache la cache. .
La différence entre Apache et nginx n’est pas tant «la rapidité avec laquelle ils peuvent répondre à une demande», mais le nombre de demandes qu’ils peuvent traiter avec la même quantité de matériel (en particulier avec des ressources limitées), ce qui est quelque peu différent.
Apache est un serveur basé sur des processus. Cela signifie un processus pour chaque demande. Nginx est un serveur basé sur des événements, ce qui signifie qu’il utilise une boucle d’événement (asynchrone) au lieu de processus ou de threads.
Et même si un serveur basé sur des processus (comme Apache) peut fonctionner plus ou moins à égalité avec un serveur basé sur des événements asynchrones (tel que nginx) sous de faibles charges, sous des charges plus lourdes, comme par exemple 10 000 requêtes simultanées, nginx n'utilise que quelques mégaoctets de RAM, alors qu'Apache nécessite plusieurs centaines de mégaoctets pour le serveur Web uniquement (sans compter l'application Web, qui nécessite beaucoup plus de ressources), si cela est possible.
Ainsi, sous des charges plus lourdes, vous constaterez qu'Apache consomme beaucoup trop de RAM, ce qui, sans surprise, dégrade considérablement les performances.
Plus important encore, une consommation de mémoire vive plus élevée signifie qu’Apache est en mesure de traiter moins de demandes sur le même matériel que nginx, ce qui signifie qu’Apache nécessite plus de matériel pour le même nombre d’utilisateurs, ce qui signifie que votre coût total de possession est plus élevé. avec Apache qu'avec nginx, ce qui réduit votre retour sur investissement.
Mémoire totale utilisée par X connexions simultanées (moins c'est mieux)
Demandes pouvant être servies par seconde lors de X connexions simultanées sur 1 ensemble de matériel (plus c'est mieux)
Source: ApacheBench, par dreamhost.com
Voir aussi cette description numérique de l'océan .
Apparemment, cela dépend de l’architecture de gestion de la connexion choisie pour Apache.
la source
Je suis passé d’Apache à Nginx / PHP-FPM il ya quelques mois.
J'ai fait quelques tests avec un site web Drupal, et testé plusieurs cas d'utilisation. Sur un serveur VPS avec 1 CPU et 512 Mo de RAM
Drupal avec seulement cache
Nginx
Apache
Drupal avec cache et boost
Nginx
Apache
référence pour l'utilisateur authentifié (chargement de page)
Nginx
Apache
Mais la puissance de Nginx est le système de cache
Drupal sans Boost et Nginx avec système de cache activé
Vous devez utiliser la configuration de Perusio Nginx pour Drupal
la source
Voici un test de performance de dix serveurs Web / variantes (par exemple, Apache, Nginx, lighttpd, Lightspeed, Hiawatha, Cherokee). Trois des tests concernent Drupal.
Je pense que Hiawatha peut être le meilleur choix global. Censé avoir une compatibilité totale avec Drupal , met l'accent sur la sécurité (prévention du DoS, XSS, CSRF, prévention d'injection SQL), ainsi que des vitesses et une empreinte similaires à celles de Nginx.
Dans deux des trois tests Drupal, Hiawatha et Nginx surpassent Apache d'environ 150%, mais dans le test statique Drupal, Apache surpasse légèrement Nginx, tandis que Hiawatha dépasse le groupe d'environ 10%.
Je n'accepterai aucun de ces tests, mais cela donne un aperçu approximatif des performances dans différentes situations d'utilisation. Je pense que la performance seule ne devrait pas être la seule considération. La stabilité et la sécurité peuvent être les facteurs les plus importants.
la source
ici est un test de charge résultats pour le fonctionnement même drupal matériel , mais avec des serveurs Web différents. (nginx et apache)
voici la conclusion de ce test:
la source