HAProxy - пересылка на другой веб-сервер на основе URI

14

У меня есть ферма HTTP со следующей конфигурацией:

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

Я хотел бы добавить некоторые опции, которые будут перенаправлять все запросы для определенного URI (то есть / специальные) на 3-й веб-сервер. Как я должен это делать?

Сагги Малахи
источник

Ответы:

23

Вот запись в блоге, которую я написал о балансировке нагрузки на основе заголовков хоста:

http://www.mattbeckman.com/2009/09/18/using-the-acl-in-haproxy-for-load-balancing-named-virtual-hosts/

Если вы хотите сопоставить URI или каталог, я бы предложил использовать path_beg вместо hdr_end, который используется в примере, представленном на этой странице. Ниже приведен пример того, как вы можете сделать это с вашей конфигурацией:

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

Надеюсь, это поможет!

Мэтт Бекман
источник
Эй, видел твой ответ только сейчас. Я на самом деле уже решил это с помощью этого же решения. Спасибо за Ваш ответ!
Сагги Малахи
Эта ссылка больше не существует. Тем не менее, он все еще доступен для просмотра здесь: web.archive.org/web/20160404161136/http://www.techrawr.com/2009/…
jaggedsoft
1
@NextLocal Спасибо - я обновил ссылку. Срок действия предыдущего домена истек, но это был псевдоним обновленной ссылки выше.
Мэтт Бекман