¿Cómo desviar el tráfico basado en el nombre de host usando HAProxy?

17

He tenido un éxito inicial con HAProxy configurando un grupo de servidores de aplicaciones que escuchan en varios otros puertos.

Ahora tengo otro servidor web escuchando en un puerto, y me gustaría saber qué cambios hacer en mi configuración para que el tráfico fluya también por nombre de host.

La siguiente es la configuración actual, suponiendo:

  • mi servidor web apache se ejecuta en examplecom: 8001
  • mi montón de servidores de aplicaciones 0.0.0.0:8081, 0.0.0.0:8082, 0.0.0.0:8083
global
  log 127.0.0.1 local0
  log 127.0.0.1 local1 notice
  maxconn 4096
  debug
  #quiet
  #user haproxy
  #group haproxy

defaults
  log global
  mode  http
  option  httplog
  option  dontlognull
  retries 3
  redispatch
  maxconn 2000
  contimeout  5000
  clitimeout  50000
  srvtimeout  50000

listen appservers 0.0.0.0:80
  mode http
  balance roundrobin
  option httpclose
  option forwardfor
  #option httpchk HEAD /check.txt HTTP/1.0
  server  inst1 0.0.0.0:8081 cookie server01 check inter 2000 fall  3
  server  inst2 0.0.0.0:8082 cookie server02 check inter 2000 fall  3
  server  inst3 0.0.0.0:8083 cookie server01 check inter 2000 fall  3
  server  inst4 0.0.0.0:8084 cookie server02 check inter 2000 fall  3
  capture cookie vgnvisitor= len 32

(cualquier otro comentario sobre la configuración ^ es bienvenido).

Ahora me gustaría continuar con lo mismo arriba, pero además en el caso: si el nombre de host es myspecialtopleveldomain <dot> com, entonces me gustaría fluir el tráfico al ejemplo <dot> com: 8001

~ B

Bosky
fuente
2
Es posible enviar solicitudes a diferentes servidores en función del nombre de host mediante la configuración de interfaz de usuario y servidor. Sin embargo, su pregunta es un poco confusa, menciona example.com:8001, pero no está en la configuración en ninguna parte. ¿Es ese el destino para las solicitudes de myspecialtopleveldomain.com en el puerto 80? Quizás pueda dar algunas URL de muestra que los usuarios ingresarían y dónde desea que esas URL sean enviadas por haproxy.
ThatGraemeGuy

Respuestas:

24

Aquí hay un ejemplo:

frontend http
        bind 0.0.0.0:80
        default_backend www
        # NAT static host names and static paths in other hostnames to a different backend
        acl host_static hdr_beg(host) -i static.
        acl url_static  path_beg         /static
        use_backend static if host_static or url_static

backend www
        balance roundrobin
        server  qa1 10.177.1.81:80
        server  qa2 10.177.1.45:80

backend static
        balance roundrobin
        server  media1 10.177.0.86:80
Chase Seibert
fuente
Gracias por la configuración de muestra, me has ayudado a finalizar nuestra configuración de equilibrador de carga :)
isNaN1247