Jak przekierowywać ruch na podstawie nazwy hosta za pomocą HAProxy?

17

Miałem początkowy sukces, gdy HAProxy skonfigurował kilka serwerów aplikacji nasłuchujących na różnych innych portach.

Mam teraz inny serwer WWW nasłuchujący na jednym porcie i chciałbym wprowadzić zmiany w mojej konfiguracji, aby przesyłać ruch również według nazwy hosta.

Poniżej przedstawiono bieżącą konfigurację, przy założeniu:

  • mój serwer Apache działa pod adresem examplecom: 8001
  • moja grupa serwerów aplikacji 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

(wszelkie inne komentarze dotyczące ^ ustawienia są mile widziane).

Teraz chciałbym kontynuować to samo powyżej, ale dodatkowo w przypadku - jeśli nazwa hosta to myspecialtopleveldomain <dot> com, to chciałbym skierować ruch do przykładu <dot> com: 8001

~ B

Bosky
źródło
2
Możliwe jest wysyłanie żądań do różnych serwerów na podstawie nazwy hosta przy użyciu konfiguracji interfejsu użytkownika i zaplecza. Twoje pytanie jest trochę mylące, wspominasz przyklad.com:8001, ale nigdzie nie ma go w konfiguracji. Czy to miejsce docelowe żądań do myspecialtopleveldomain.com na porcie 80? Być może możesz podać kilka przykładowych adresów URL, które wprowadzą użytkownicy i gdzie chcesz, aby te adresy URL były wysyłane przez haproxy.
ThatGraemeGuy

Odpowiedzi:

24

Oto przykład:

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
źródło
Dzięki za przykładową konfigurację, właśnie pomogłeś mi sfinalizować konfigurację
modułu