¿Debería Nginx estar al frente de HAProxy u opuesto?

11

Tengo poca experiencia en diseño de arquitectura de infraestructura de sitios web. Sé que podría ser una situación específica. Se supone que el sitio web:

1) Necesita soporte HTTPS para alguna página (por ejemplo, página de inicio de sesión) mientras que otras son solo una página HTTP.

2) Necesita múltiples servidores web para que se requiera un equilibrio de carga.

3) Necesita almacenamiento en caché HTTP y compresión para aumentar el rendimiento.

4) Algunas solicitudes (p. Ej., Carga de imágenes) deben enrutarse a servidores de back-end dedicados. Por lo tanto, se requiere un equilibrio basado en URL.

Sé que NginX y HAProxy son agradables Reverse Proxy y / o Load Balancer de código abierto. Dado que HAProxy no es compatible con SSL, el equilibrio de carga de Nginx no es tan bueno como HAProxy. Tomaré ambos.

Entonces, ¿debería poner Nginx (como proxy inverso) en la parte delantera de HAProxy (como equilibrador de carga) u opuesto?

Gracias

Morgan Cheng
fuente

Respuestas:

7

Si planea tener todos los servidores web disponibles a través de HTTPS, deberá instalar Nginx frente a HAProxy. Con esa configuración, su Nginx manejará todo el trabajo SSL y enviará el tráfico HTTP descifrado directamente a la interfaz HAProxy, que luego enviará las solicitudes de equilibrio de carga a sus servidores web según las reglas que especifique.

La idea de usar LVS, como lo menciona womble, es que es algo menos intrusivo ya que no mantiene una conexión entre su servidor web y el cliente que accede al sitio. Por otro lado, LVS solo le proporcionará un equilibrio de carga simple y no le permitirá reenviar solicitudes basadas en la extensión del archivo, la URL solicitada, los encabezados, etc. Es por eso que HAProxy se usa en muchas situaciones.

Si solo necesita SSL en un servidor (sin equilibrio de carga), puede usar HAProxy para todo sin usar Nginx. Por otro lado, tendrá un problema al no poder ver la dirección IP de origen del cliente en los registros HTTPS del servidor web (porque HAProxy reescribe esa dirección). Sin embargo, la IP estará en registros HAProxy si la habilita;)


fuente
Gracias. ya que "Algunas solicitudes (p. ej., carga de imágenes) deben enrutarse a servidores de back-end dedicados. Por lo tanto, se requiere un equilibrio basado en URL". (como actualicé la pregunta). LVS podría no cumplir mis requisitos.
Morgan Cheng
Por cierto, ¿la ocultación de la dirección IP por HAProxy es solo para HTTPS, o también para HTTP?
Morgan Cheng
@ Morgan, la ocultación de ip es solo para HTTPS.
Es solo para backends en modo TCP, por lo que todo lo que no sea HTTP no verá la dirección IP ya que se envía como un Encabezado HTTP (X-Forward-For).
No exactamente. Haproxy puede conectarse al servidor utilizando la dirección IP del cliente, pero eso requiere la cooperación del núcleo (por ejemplo: función TPROXY). Sin embargo, esto debe evitarse siempre que sea posible.
Willy Tarreau
1

Debería usar nginx, hace todo lo que necesita como servidor web frontend. Si necesita equilibrio de carga frontal, use un equilibrador de carga L3 como Linux Virtual Server , porque no se interpone en el camino como lo hace HAproxy. Use HAproxy si es necesario para hacer un equilibrio de carga detrás de escena, como equilibrar las solicitudes a un grupo de trabajadores de back-end.

womble
fuente
2
Se dice que el equilibrio de carga de NginX es simple, solo el enfoque round robin. Esa es la razón por la que estoy tomando HAProxy en consideración.
Morgan Cheng
1
Se dice correctamente; Lo dije yo mismo. Es por eso que no recomiendo usar nginx como balanceador de carga, y no encontrarás ninguna mención de usar nginx como balanceador de carga en esta (o en cualquier otra) respuesta mía.
womble
Eso es solo si tiene miedo de usar su propia compilación desde la fuente (o puertos en FreeBSD). Hay varios módulos de terceros que mejoran el equilibrio de carga: wiki.nginx.org/3rdPartyModules
Martin Fjordvald
2
Mejora, sí. Hacer adecuado, no. Mis pensamientos sobre esto se pueden encontrar en hezmatt.org/~mpalmer/blog/2011/07/24/… (busque "no bonito").
womble