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?

Saggi Malachi
fuente

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!

Matt Beckman
fuente
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