Comment détourner le trafic basé sur le nom d'hôte en utilisant HAProxy?

17

J'ai eu un certain succès initial avec HAProxy en configurant un tas de serveurs d'applications écoutant sur divers autres ports.

J'ai maintenant un autre serveur Web à l'écoute sur un port, et j'aimerais également savoir quelles modifications apporter à ma configuration pour acheminer le trafic par nom d'hôte.

Voici la configuration actuelle, en supposant:

  • mon serveur web apache fonctionne sur examplecom: 8001
  • mon groupe de serveurs d'applications 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

(tout autre commentaire sur la configuration ^ est le bienvenu.)

Maintenant, je voudrais continuer la même chose ci-dessus, mais en plus au cas où - si le nom d'hôte est myspecialtopleveldomain <dot> com, alors je voudrais faire circuler le trafic vers l'exemple <dot> com: 8001

~ B

Bosky
la source
2
Il est possible d'envoyer des demandes à différents serveurs en fonction du nom d'hôte à l'aide de la configuration frontale et principale. Votre question est un peu déroutante cependant, vous mentionnez example.com:8001, mais ce n'est pas dans la configuration nulle part. Est-ce la destination des demandes à myspecialtopleveldomain.com sur le port 80? Vous pouvez peut-être donner quelques exemples d'URL que les utilisateurs entreraient et où vous souhaitez que ces URL soient envoyées par haproxy.
ThatGraemeGuy

Réponses:

24

Voici un exemple:

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
la source
Merci pour l'exemple de configuration, vous venez de m'aider à finaliser notre configuration d'équilibreur de charge :)
isNaN1247