web-dev-qa-db-fra.com

Nginx vs Apache comme proxy inverse, lequel choisir

ce genre de question a peut-être été posée ici, mais je n'ai trouvé aucune qui correspond vraiment à ma question. J'ai entendu que les performances de nginx sont assez impressionnantes, mais Apache a plus de documents, de la communauté (lire: expert) pour obtenir de l'aide

Maintenant ce que je veux savoir, comment les deux serveurs Web se comparent en termes de performances, facilité de configuration, niveau de personnalisation, etc. COMME serveur proxy inversé dans un environnement vps ??

Je suis toujours en train de peser entre les deux pour une Ruby application web (pas ROR) servie avec Thin (une de Ruby web server)).
Une réponse spécifique sera très appréciée. Réponse générale sans toucher à la partie Ruby va bien. Je suis toujours noob dans l'administration du serveur Web.

39
mhd

Je voulais mettre cela dans un commentaire car je suis d'accord avec le point le plus important de la réponse de webdestroyas, mais c'est devenu un peu trop long.

Vous êtes dans un environnement VPS, cela signifie que vous allez probablement manquer de RAM. Pour cette seule raison, vous voudrez Nginx car son empreinte mémoire est plus petite que Apaches.

Je ne suis pas non plus d'accord avec certains des arguments mentionnés.

Facilité de configuration:
Nginx n'est pas plus difficile qu'Apache. C'est différent. Si vous êtes habitué à Apache, le changement sera toujours plus difficile, cela ne signifie pas que le style de configuration lui-même est plus difficile. J'ai migré complètement d'Apache vers Nginx il y a plus d'un an et aujourd'hui j'ai du mal à configurer un serveur Apache alors que je trouve Nginx extrêmement facile à configurer.

Pour Ruby:
Nginx a Passenger, cependant, je le vois généralement décrit comme la méthode inférieure pour se connecter à Ruby. Je ne suis pas un programmeur Ruby donc je ne peux pas le vérifier mais je vois souvent Unicorn et Thin mentionnés comme de meilleures alternatives.

En conclusion:
Nginx a été conçu pour être un proxy inverse. Initialement, il n'a servi que des fichiers statiques et un proxy inverse à un serveur principal via HTTP/1.0. Depuis lors, fastcgi, l'équilibrage de charge et diverses autres fonctionnalités ont été ajoutés, mais son objectif de conception initial était de servir des fichiers statiques et un proxy inverse. Et ça le fait très bien.

Apache, au contraire, est un serveur Web à usage général. Je ne doute pas qu'il puisse inverser parfaitement le proxy, mais il n'a pas été conçu pour avoir une empreinte mémoire minimale et, par conséquent, il nécessite plus de ressources que Nginx, ce qui signifie que mon argument d'environnement VPS initial entre en jeu.

34
Martin Fjordvald

Performance:
NGinX. Ce serveur est connu pour être l'un des serveurs Web les plus performants et est utilisé par de nombreuses sociétés différentes (Notable, MediaTemple)

Facilité de configuration:
Apache. La configuration d'Apache est vraiment simple et vraiment puissante. Nginx est puissant, mais peut être très difficile à comprendre, car il ressemble plus à un langage de programmation qu'à un fichier de configuration.

Niveau de personnalisation:
Apache. Apache a des tonnes de mods et autres plugins écrits pour cela. Bien que Nginx ait encore des plugins pour cela, je pense qu'Apache en a beaucoup plus que Nginx.

Pour Ruby:
Je sais que Nginx peut être utilisé comme un puissant équilibreur de charge avec Mongrel/webrick. Cependant, Apache a Phusion/Passenger qui rend l'intégration plus agréable.

Gagnant du proxy inverse:
NGinX

9
Mitch Dempsey

Nginx est basé sur les événements, tandis qu'Apache est basé sur les processus. Sous une charge élevée, cela fait toute la différence dans le monde ... Apache doit bifurquer ou démarrer un nouveau thread pour chaque connexion, contrairement à nginx. Cette différence se manifeste principalement dans l'utilisation de la mémoire, mais également dans le temps de réponse des utilisateurs et d'autres mesures de performances. Nginx peut gérer des dizaines de milliers de simultanées connexions HTTP persistantes sur du matériel moderne. Apache utilisera 1 à 2 Mo de pile pour chaque connexion, donc en faisant le calcul, vous voyez que vous ne pouvez gérer que quelques centaines ou peut-être mille connexions simultanément sans commencer à permuter.

Nous utilisons nginx devant Apache et IIS dans notre environnement en tant que proxy d'équilibrage de charge et de mise en cache, et nous ne pourrions pas être plus heureux. Nous utilisons deux boîtes nginx de petite taille à la place d'une paire d'appareils F5 loués très chers et nos sites sont beaucoup plus rapides à la fois en termes de sensations et de temps de réponse mesurés.

8
rmalayter

J'étais dans le même dilemme que toi il y a environ deux semaines.

Pour vous donner une réponse vraiment concise: D'après mes recherches, nginx est vraiment rapide et convivial, mais il n'a été conçu que pour inverser les fichiers statiques du proxy. Les autres sont des solutions boulonnées que vous devez configurer ou écrire à votre guise.

AFAIK nginx n'a pas de fichiers htaccess, vous devez donc trouver votre chemin si cela dépend de cette fonctionnalité.

AFAIK tout avait besoin de travaux et j'ai vu des tutoriels.

Je vais aller avec nginx avec ma configuration de test et de profilage. J'ai une application LAMP typique.

J'ai lu qu'il y a des gens qui inversent le proxy et servent des fichiers statiques de nginx et passent tout le reste comme PHP à une instance Apache en cours d'exécution. Ils prétendent un bon compromis. Je n'ai pas de données de performance à ce sujet , mais vous voudrez peut-être le savoir.

1
deploymonkey

J'ai eu de sérieux problèmes avec le mod_proxy d'Apache sur une variété de plates-formes dans divers environnements différents au cours des deux dernières années. De temps en temps, il cessera simplement de fonctionner et le seul remède semble être de redémarrer le serveur Apache.

Personnellement, je ne demanderais pas "nginx vs Apache", mais "nginx vs lighttpd" - et c'est un appel beaucoup plus difficile!

1
Mo.