Bagaimana cara mengalihkan lalu lintas berdasarkan nama host menggunakan HAProxy?

17

Saya sudah memiliki beberapa keberhasilan awal dengan HAProxy menyiapkan banyak server aplikasi mendengarkan pada berbagai port lain.

Saya sekarang memiliki server web lain yang mendengarkan pada satu port, dan saya ingin perubahan apa yang dilakukan pada konfigurasi saya untuk mengalirkan traffic dengan nama host juga.

Berikut ini adalah pengaturan saat ini, dengan asumsi:

  • server web apache saya berjalan di examplecom: 8001
  • sekelompok server aplikasi saya 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

(komentar lain pada pengaturan ^ dipersilakan.)

Sekarang saya ingin melanjutkan yang sama di atas, tetapi sebagai tambahan - jika hostname adalah myspecialtopleveldomain <dot> com, maka saya ingin mengalirkan lalu lintas ke contoh <dot> com: 8001

~ B

Bosky
sumber
2
Dimungkinkan untuk mengirim permintaan ke server yang berbeda berdasarkan nama host menggunakan konfigurasi frontend & backend. Namun pertanyaan Anda agak membingungkan, Anda menyebutkan example.com:8001, tetapi tidak ada di konfigurasi di mana pun. Apakah itu tujuan permintaan ke myspecialtopleveldomain.com pada port 80? Mungkin Anda bisa memberikan beberapa contoh URL yang akan dimasukkan pengguna dan ke mana Anda ingin URL itu dikirim oleh haproxy.
ThatGraemeGuy

Jawaban:

24

Berikut ini sebuah contoh:

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
sumber
Terima kasih atas contoh konfigurasi, Anda baru saja membantu saya menyelesaikan konfigurasi load-balancer kami :)
isNaN1247