Назад | Перейти на главную страницу

Адрес динамического сервера HAProxy на основе значения заголовка

Здравствуйте, я пытаюсь направить трафик обратно на компьютер пользователя, чтобы запустить сайт локально, но собираю заголовки / файлы cookie / логику маршрутизации для других источников, которые предоставляет HAProxy. Однако до сих пор я не мог понять, как это сделать. В документации говорится, что можно использовать переменные среды. https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-server

Любая часть адресной строки может ссылаться на любое количество переменных среды, поставив перед их именем знак доллара ('$') и, при необходимости, заключив их в фигурные скобки ('{}'), аналогично тому, как это делается в оболочке Bourne.

но я бы предположил, что есть способ использовать выборку acl или выборки, но, хоть убей, я не могу понять, как это сделать. Ниже приведен пример того, что я пробовал. Я проверил концепцию, удалив $ {hdr (originalIp)} и используя свой IP-адрес, но я хочу, чтобы он динамически использовал IP-адрес запрашивающей стороны, если файл cookie присутствует.

### Sample config
acl has_local_cookie cook_sub(local) -i true
use_backend local    if has_local_cookie
backend local
server local-origin ${hdr(originalIp)}:443 ssl verify none

Проблема с тем, что вы пытаетесь сделать, заключается в том, что вы обрабатываете всю конфигурацию так, как если бы она постоянно анализировалась и интерпретировалась во время выполнения, что, конечно, не так.

Некоторые аргументы к различным директивам статичны, другие - динамичны, но server объявления определенно статичны. Сервер представляет ровно один целевой адрес, а не отдельный адрес для каждого запроса.

Вам нужно будет настроить серверную часть для каждого разработчика, или вы можете поместить их всех в одну серверную часть, backend local с единым объявлением сервера для каждого разработчика, server dev-1 192.168.1.1:80 ..., server dev-2 ..., и т.д.

затем use_backend local if { cook_sub(local) -i true }.

Затем в бэкэнде добавьте use-server чтобы сопоставить имена серверов с исходным IP use-server dev-1 if { src 192.168.1.1 } для каждого разработчика.

Обратите внимание, что { ... } анонимный ACL, гораздо более чистый (imho) способ тестирования простых условий, особенно когда условия оцениваются только в одном месте в конфигурации. Если вы тестируете одно и то же условие в нескольких местах, именованные списки ACL лучше, потому что они редактируются только в одном месте, поэтому вам не нужно обновлять их в нескольких местах, как если бы вы скопировали один и тот же анонимный ACL вокруг конфиг.