HAProxy: reenviar a un servidor web diferente basado en URI


14

Tengo una granja HTTP con la siguiente configuración:

listen webfarm 10.254.23.225:80
       mode http
       balance roundrobin
       cookie SERVERID insert
       option httpclose
       option forwardfor
       option httpchk HEAD /check.txt HTTP/1.0
       server webA 10.254.23.4:80 cookie A check
       server webB 10.248.23.128:80 cookie B check

Me gustaría agregar alguna opción que reenvíe todas las solicitudes de un URI específico (es decir, / especial) a un tercer servidor web. ¿Cómo debería hacerlo?

Respuestas:


23

Aquí hay una publicación de blog que escribí sobre el equilibrio de carga basado en los encabezados de host:

http://www.mattbeckman.com/2009/09/18/using-the-acl-in-haproxy-for-load-balancing-named-virtual-hosts/

Si desea hacer coincidir un URI o directorio, le sugiero que use path_beg en lugar de hdr_end que se usa en el ejemplo proporcionado en esa página. A continuación se muestra un ejemplo de cómo puede hacer esto con su configuración:

frontend http-in
    bind 10.254.23.225:80
    acl has_special_uri path_beg /special
    use_backend special_server if has_special_uri
    default_backend webfarm

backend webfarm
    balance roundrobin
    cookie SERVERID insert
    option httpchk HEAD /check.txt HTTP/1.0
    option httpclose
    option forwardfor
    server webA 10.254.23.4:80 cookie webA check
    server webB 10.248.23.128:80 cookie webB check

backend special_server
    balance roundrobin
    cookie SERVERID insert
    option httpchk HEAD /check.txt HTTP/1.0
    option httpclose
    option forwardfor
    server webC 10.0.0.1:80 cookie webC check

¡Espero que ayude!


Oye, vi tu respuesta solo ahora. De hecho, ya lo he resuelto usando esta misma solución. ¡Gracias por tu respuesta!
— Saggi Malachi

Este enlace ya no está vivo. Sin embargo, todavía se puede ver aquí: web.archive.org/web/20160404161136/http://www.techrawr.com/2009/…
— jaggedsoft

1
@NextLocal Gracias - Actualicé el enlace. Dejé caducar el dominio anterior, pero era un alias al enlace actualizado anterior.
— Matt Beckman
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.