Как я могу сделать запросы маршрута haproxy на основе подстрок URL?

13

Балансировщик нагрузки настроен с двумя задними сторонами.

URI запроса будет выглядеть следующим образом:

http://example.com/answers/submit
http://example.com/tag-02/answers/submit

Как я могу настроить haproxy таким образом, чтобы запрос отправлялся одному или другому из двух бэкэндов, в зависимости от формата URI запроса? Единственная разница между запросами заключается /tag-02/в URI запроса.

Конфигурационный файл haproxy для этого с небольшим объяснением был бы очень признателен, так как я новичок в haproxy.

самоучка
источник

Ответы:

13

Вы хотите использовать ACL :

backend be1 # this is your default backend
  ...
backend be2 # this is for /tag-02 requests
  ...

frontend fe
  ...
  default_backend be1
  acl url_tag02 path_beg /tag-02
  use_backend be2 if url_tag02

Раздел 7 руководства по настройке HAProxy содержит подробную информацию о ACL, но вы должны знать магическое use_backendзаклинание, скрытое в разделе 4 руководства, чтобы знать, что делать с ACL.

natacado
источник
1
Несмотря на то, что объявленный стиль ACL, как правило, более читабелен и пригоден для повторного использования, вы можете, если хотите, включить объявление ACL в use_backendсаму директиву с помощью use_backend be2 if { path_beg /tag-02 }.
womble
0

Чтобы предоставить лучший пример для ответа выше, ниже приведен пример конфигурации.

frontend https-in
   bind *:443 ssl crt /etc/ssl/server.pem
   mode http
   redirect scheme https if !{ ssl_fc }

   acl uri_help path_beg /help
   use_backend help if uri_help

backend help
    balance     roundrobin
    server      help yourbackendserver.com check
Джоэл Нишант Понукуматла
источник