Nginx doit-il être à l'avant de HAProxy ou en face?

11

J'ai peu d'expérience dans la conception d'architecture d'infrastructure de site Web. Je sais que cela pourrait être spécifique à la situation. Le site Web est censé:

1) Besoin du support HTTPS pour certaines pages (par exemple la page de connexion) tandis que d'autres ne sont que des pages HTTP.

2) Besoin de plusieurs serveurs Web afin qu'un certain équilibrage de charge soit nécessaire.

3) Besoin de mise en cache et de compression HTTP pour améliorer les performances.

4) Certaines requêtes (par exemple le téléchargement d'images) doivent être acheminées vers des serveurs backend dédiés. Un équilibrage basé sur URL est donc requis.

Je sais que NginX et HAProxy sont tous les deux un proxy inverse et / ou un équilibreur de charge open source. Depuis HAProxy ne prend pas en charge SSL, tandis que l'équilibrage de charge Nginx n'est pas aussi bon que HAProxy. Je prends les deux.

Alors, dois-je mettre Nginx (en tant que proxy inverse) devant HAProxy (en tant qu'équilibreur de charge), ou en face?

Merci

Morgan Cheng
la source

Réponses:

7

Si vous prévoyez d'avoir tous les serveurs Web disponibles sur HTTPS, vous devrez installer Nginx devant HAProxy. Avec cette configuration, votre Nginx gérera tout le travail SSL et enverra le trafic HTTP déchiffré directement au frontend HAProxy, qui équilibrera ensuite les demandes vers vos serveurs Web en fonction des règles que vous spécifiez.

L'idée d'utiliser LVS, comme mentionné par womble, est qu'il est un peu moins intrusif car il ne détient pas de connexion entre votre serveur Web et le client accédant au site. D'un autre côté, LVS ne vous fournira qu'un simple équilibrage de charge et ne vous permettra pas de transférer des demandes en fonction de l'extension de fichier, de l'URL demandée, des en-têtes, etc. C'est pourquoi HAProxy est utilisé dans de nombreuses situations.

Si vous n'avez besoin que de SSL sur un seul serveur (non équilibré en charge), vous pouvez utiliser HAProxy en toute sécurité sans utiliser Nginx. D'un autre côté, vous aurez un problème avec l'impossibilité de voir l'adresse IP source du client dans les journaux HTTPS du serveur Web (car HAProxy réécrit cette adresse). L'IP sera dans les journaux HAProxy si vous l'activez cependant;)


la source
Merci. car "Certaines requêtes (par exemple, le téléchargement d'images) doivent être acheminées vers des serveurs backend dédiés. Un équilibrage basé sur l'URL est donc requis." (comme j'ai mis à jour la question). LVS pourrait ne pas répondre à mes besoins.
Morgan Cheng
BTW, le masquage de l'adresse IP par HAProxy est juste pour HTTPS, ou pour HTTP aussi?
Morgan Cheng
@Morgan, le masquage de l'ip est juste pour HTTPS.
C'est uniquement pour les backends en mode TCP, donc tout ce qui n'est pas HTTP ne verra pas l'adresse IP car elle est envoyée en tant qu'en-tête HTTP (X-Forwarded-For).
Pas exactement. Haproxy peut se connecter au serveur en utilisant l'adresse IP du client, mais cela nécessite une coopération avec le noyau (par exemple: fonctionnalité TPROXY). Cela devrait cependant être évité autant que possible.
Willy Tarreau
1

Vous devez simplement utiliser nginx, il fait tout ce dont vous avez besoin en tant que serveur Web frontal. Si vous avez besoin d'un équilibrage de charge frontal, utilisez un équilibreur de charge L3 tel que Linux Virtual Server , car il ne gêne pas comme le fait HAproxy. Utilisez HAproxy si nécessaire pour effectuer l'équilibrage de charge en arrière-plan, comme l'équilibrage des demandes à un pool de travailleurs backend.

womble
la source
2
On dit que l'équilibrage de charge NginX est une approche simple, juste à tour de rôle. C'est la raison pour laquelle je prends HAProxy en considération.
Morgan Cheng
1
C'est dit correctement; Je l'ai dit moi-même. C'est pourquoi je ne recommande pas d'utiliser nginx comme équilibreur de charge, et vous ne trouverez aucune mention de l'utilisation de nginx comme équilibreur de charge dans cette (ou toute autre) réponse à moi.
womble
C'est seulement si vous avez peur d'utiliser votre propre compilation depuis la source (ou les ports sur FreeBSD). Il existe plusieurs modules tiers qui améliorent l'équilibrage de charge: wiki.nginx.org/3rdPartyModules
Martin Fjordvald
2
Améliorez, oui. Faites adéquat, non. Mes réflexions à ce sujet peuvent être trouvées sur hezmatt.org/~mpalmer/blog/2011/07/24/… (recherchez "pas joli").
womble