Здравствуйте, я пытаюсь направить трафик обратно на компьютер пользователя, чтобы запустить сайт локально, но собираю заголовки / файлы 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 вокруг конфиг.