У меня есть служба, работающая на порту 10000, на который должен выходить haproxy. Я меняю URL-адреса, но структура выглядит так:
localhost:10000/testbutton/?test=test
Однако у нас есть аналогичные сервисы на других портах с такой же настройкой:
localhost:10001/testbutton
Таким образом, мы настраиваем HAProxy ACL для соответствия определенным параметрам пути и отправляем его в определение серверной части, а также удаляем из него любые лишние параметры.
frontend test
maxconn 2000
bind 0.0.0.0:9000
acl testbutton path_reg -i /automated/usa/newyork/testbutton/.*
use_backend testbutton-server if testbutton
backend testbutton-server
#reqrep ^(.+)\ /+[^/]+(/+.*)?$ \1\ \2
#reqrep ^(.+newyork)\ /+[^/]+(/testbutton) \1\ \2
server localhost 10.136.93.186:10000 maxconn 100
Итак, вы ожидаете, что localhost: 9000 / automatic / usa / newyork / testbutton / test = test перейдет на бэкэнд, уберет все перед testbutton и использует localhost: 10000 / testbutton / test = test.
Проблема в том, что мне очень трудно использовать reqrep для сопоставления и удаления параметров перед testbutton. Кто-нибудь может мне с этим помочь? Кроме того, есть ли онлайн-инструмент, который я могу использовать для тестирования reqrep? Я протестировал второе правило с помощью rubular, но когда я запускаю свое приложение, оно сообщает об ошибке 404 для локального хоста: 9000 / automatic / usa / newyork / testbutton / test = test endpoint.
РЕДАКТИРОВАТЬ: сейчас я пробую следующее регулярное выражение:
reqrep ^(/[A-Za-b].+)/testbutton /+[^/]+(/testbutton+.*)?$ \1\ \2
И получаю следующую ошибку:
'reqrep' : Expecting nothing, 'if', or 'unless', got '\1 \2'.
Кто-нибудь может мне сказать, что это значит? Мой поиск в Google дал только один результат:
https://stackoverflow.com/questions/39613959/haproxy-with-url-prefix
EDIT2: сейчас пытаюсь ^([^\ :]*)\ /automated/usa/newyork/(.*) \1\ /\2
без результатов. Может ли кто-нибудь указать мне на исчерпывающую документацию по синтаксису reqrep? Документация на сайте haproxy не особо полезна.