Vernis -> Nginx -> Apache une bonne idée?

10

Je pense à l'architecture d'un nouveau serveur Web. Est-ce que avoir Varnish comme cache devant Nginx comme proxy inverse et servir des fichiers statiques devant apache pour tous les efforts serait une bonne idée?

Je vais exécuter des applications php et ruby ​​on rails.

Y aura-t-il trop de frais généraux pour transmettre des requêtes php à apache via deux autres processus?

Merci beaucoup!

Zoran Zaric
la source

Réponses:

8

Ouais, c'est valide. Mon approche personnelle serait d'utiliser Varnish à l'avant et d'utiliser VCL pour diviser le trafic entre les requêtes NGINX statiques et votre poids lourd (que ce soit Apache ou Passenger ou ... cela n'a pas d'importance). Cela est particulièrement vrai s'il se trouve sur la même machine car vous n'avez pas besoin de la surcharge supplémentaire. Cela ne vous achète pas nécessairement.

McJeff
la source
ouais c'est une assez bonne idée, car le vernis devrait être assez rapide pour ça
Zoran Zaric
6

Le vernis ne prend pas (encore) en charge la compression gzip, donc ce pourrait être une idée de l'échanger avec nginx devant pour compresser ce que le vernis renvoie. Étant donné que le vernis et nginx ne se battent pas pour les mêmes ressources (nginx utilise le CPU pour la compression gzip, tandis que le vernis utilise la mémoire), ils devraient fonctionner sans problème sur la même machine.

Le vernis prend désormais en charge la compression gzip , donc à moins que vous n'ayez besoin d'une terminaison SSL (comme suggéré dans les commentaires), je suggère de mettre le vernis directement en contact avec Internet.

Pour http:

(internet) -> (vernis, gzip, mise en cache, esi) -> (application)

Pour https:

(internet) -> (nginx, ssl) -> (vernis, gzip, mise en cache, esi) -> (application)

Si vous voulez aussi Apache là-dedans (pour le support omniprésent de mod_foobar), je le mettrais entre le vernis et l'application

Mise à jour: mise à jour pour inclure la prise en charge de gzip dans le vernis 3.0. Ajout de ssl / esi comme suggéré dans les commentaires

mogsie
la source
Si tout ce qui sert du contenu au vernis l'encode dans gzip, alors le vernis le transmettra à gzipped sans se plaindre: varnish-cache.org/wiki/FAQ/Compression La seule chose que le vernis ne fait pas est de prendre le contenu non compressé du non-caché l'application et la réserver compressée. Est-ce aussi votre compréhension?
ewalk
La seule fois où vous exécutez nginx devant du vernis, c'est lorsque vous utilisez ESI. Étant donné que vous ne pouvez pas assembler ESI à partir de pages compressées et que Varnish ne compressera pas une page assemblée, Nginx est placé devant Varnish pour fournir cette compression. Si l'origine sert le contenu compressé, Varnish transmettra ces données au client sous forme compressée.
user6738237482
Oui, ESI est l'une des raisons pour lesquelles je recommanderais cette configuration, mais je suppose que si votre back-end se comprime et que vous n'utilisez pas ESI, vous pouvez vous passer de nginx, car je pense que le vernis peut gérer beaucoup de trafic sans une goutte de sueur.
mogsie
@ user6738237482, la terminaison SSL de nginx suport, pas Varnish. En fait, être devant quelque chose comme le vernis ou Apache est exactement ce pour quoi nginx a été initialement conçu, en tant que serveur proxy rapide et léger.
rmalayter
4

Le montant des frais généraux ne devrait pas être significatif. Je suppose qu'une partie de la raison pour laquelle vous voulez avoir ces deux niveaux est pour l'évolutivité; dans ce cas, vous verriez très probablement, par rapport à apache, que le vernis et le nginx ne fonctionnent pas très dur.

Si vous disposez des trois niveaux sur une même machine, il devrait y avoir moins d'impact sur les performances avant d'atteindre la capacité du serveur lui-même.

Comme alternative, pourquoi ne pas vernir + nginx avec passager? J'ai utilisé cette configuration dans le passé et nginx utilisant passager est relativement léger et fonctionnait assez bien. Cela pourrait valoir la peine de réfléchir si vous n'êtes pas marié à Apache qui gère votre pile de rails.

Tony
la source
Oui, je pourrais passer d'Apache à Nginx pour les rails, mais donner aux clients la possibilité d'utiliser des fichiers .htaccess est un + pour apache, pour php au moins.
Zoran Zaric
2

Je suis l'administrateur système d'une plateforme de commerce électronique en démarrage. Nous utilisons vernis + nginx devant notre pile PHP / apache et cela a fait des merveilles.

Nous avons une application qui utilise beaucoup de mémoire et l'application utilisait environ 15 à 20 Go de RAM par nœud Web et une fois que nous avons mis du vernis devant, c'est maintenant environ 8 Go de RAM par nœud. Ils n'ont jamais piqué.

Je le recommande donc vivement.

Mike
la source
3
Vous savez que le vernis ne parle pas ssl non?
Mike
1

J'utilise Drupal, avec le module boost sur un serveur Apache + PHP + MySQL, mais devant eux j'utilise Nginx avec la fonction gzip-static activée, et j'utilise les résultats de boost pour servir les utilisateurs.

Et en plus de tout ça j'utilise du vernis, tous sur le même PC, j'ai de bons résultats.

J'utilise également Nginx pour modifier les en-têtes que Drupal ne fait pas très bien pour le cache.

Go2linux
la source
0

Ce n'est pas une bonne idée, sauf si vous avez besoin de quelque chose comme ESI. Nginx possède son propre système de mise en cache qui fonctionne mieux .

VBart
la source
Je sais que c'est une ancienne réponse, mais malheureusement ce lien n'est plus disponible, donc je ne peux pas vérifier votre réclamation. D'après mon expérience, Varnish est difficile à battre dans sa vitesse et sa flexibilité en tant que proxy inverse.
Martijn Heemels
-1

Apache peut être utilisé pour terminer (décrypter) SSL, consultez http://noosfero.org/Development/Varnish#SSL

brauliobo
la source
1
Veuillez éviter de publier des liens en tant que réponses, car votre réponse risque de perdre tout son sens lorsqu'elle est affectée par linkrot . Veuillez envisager de modifier votre réponse et d'inclure des parties pertinentes à partir du lien que vous avez fourni dans votre réponse. Laissez le lien en place comme référence.
Bryan