HAProxy путь регулярного выражения на основе поиска карты - PullRequest
0 голосов
/ 04 декабря 2018

Я использую HAProxy 1.8.14 на сервере, на котором работает растяжка Debian.

Я хочу направлять запросы в разные бэкэнды для определенного набора доменов, но только для некоторых конкретных путей.Поскольку существует довольно много доменов и разрешены различные пути, я думаю, что решение с использованием карт было бы неплохо.

Я пытался использовать карту для поиска серверной части на основе hdr (host) с условием, что путьдолжно соответствовать регулярному выражению, сопоставленному с hdr (host).Я пробовал следующее, но не могу заставить его работать:

use_backend bk-%[hdr(host),lower,map_dom(/etc/haproxy/host_to_backend.map,bk_default)] if { path_reg %[hdr(host),lower,map_dom(/etc/haproxy/domain_path_whitelist.map)] }

Пример host_to_backend.map:

a.foo.org a
b.foo.org b
c.foo.org c

Пример domain_path_whitelist.map (регулярные выражения не проверены):

a.foo.org ^/(yada|info)/.*$
b.foo.org ^.*$
c.foo.org ^/bar/.*$

Чтобы избежать сложностей регулярных выражений, я также попробовал альтернативу «умоляю»:

use_backend bk-%[hdr(host),lower,map_dom(/etc/haproxy/host_to_backend.map,bk_default)] if { path_beg %[hdr(host),lower,map_dom(/etc/haproxy/domain_path_whitelist.map)] }

... но не повезло.

Это так?можно решить мою конкретную проблему с помощью карт?Если нет, можете ли вы предложить альтернативное решение?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Я нашел сообщество HAProxy и тоже спросил там .Я, вероятно, пойду с вариантом map_reg:

use_backend bk-%[base,lower,map_reg(/etc/haproxy/base_to_backend.map,bk_default)]
0 голосов
/ 04 декабря 2018

Это невозможно сделать так, как вы пытаетесь, потому что log format variables ссылка %[] не может использоваться в контексте сопоставления acl.path_beg acl пытается буквально соответствовать %[hdr(host),lower,map_dom(/etc/haproxy/domain_path_whitelist.map)].

Также обратите внимание, что для совпадения с регулярным выражением на пути вы должны использовать path_reg

Альтернативное решение заключается в использовании acl без попытки сопоставления с переменной, например:

use_backend bk-%[hdr(host),lower,map_dom(/etc/haproxy/host_to_backend.map,bk_default)] if { path_req ^/(yada|info)/.*$ }
...