HAProxy — Браузер и Curl Сообщают о противоречивых результатах

#haproxy

Вопрос:

Окружающая среда:

  • Версия HAProxy: 1.5.18
  • 2 сервера HAProxy с пульсом между ними

Я пытаюсь настроить FE/BE, который будет поддерживать:

Соединения, входящие в один домен/uri, перенаправляются в другой домен (как внутренний, так и внутренний) на указанный порт (все серверные приложения SSL и работают непосредственно на них):

  - sub1.domain-a.com/test1 -> newsub1.domain-b.com:30000
 - sub2.domain-a.com/test2 -> newsub2.domain-b.com:20000
 - ...
 

Примечания:

  • Если я зайду на веб-сайт напрямую (не через HAProxy (newsub1.domain-b.com:30000)), веб-приложение будет работать так, как ожидалось

В попытке сделать это, вот моя конфигурация:

haproxy.cfg (соответствующие разделы):

 frontend f5
    bind *:443 ssl crt /etc/haproxy/c-and-k.pem
    mode http

    acl path_spgen path_beg -i /spgen
    use_backend be_spgen if path_spgen

    ## Rewrite the sending path to strip off 'spgen'
    reqrep ^([^ :]*) /spgen/(.*)     1 /2  if path_spgen

backend be_spgen
    mode http

    ## Attempt to fix sporadic 'This combination of host and port requires TLS' -- not working
    option httpchk HEAD / HTTP/1.1rnHost: test1.domain-b.com
    balance source

    server test1 test1.domain-b.com:30000 check ssl ca-file /etc/haproxy/ca.pem
 

Когда я пытаюсь свернуться или открыть браузер, чтобы https://sub1.domain-a.com/spgen, В итоге я получаю 1 из 2 ошибок:

  • HTTP Статус 404 — Не найден-в этом случае я добираюсь до серверной части, но конфигурация не удаляет «/spgen», как я хотел
  • Неверный запрос n Для этой комбинации хоста и порта требуется протокол TLS.

Если я просто повторно запущу curl или обновлю браузер, я смогу заставить его чередовать ошибки с достаточным количеством обновлений/повторных запусков. Оба прокси-сервера работают с одинаковыми конфигурациями (и служба несколько раз перезапускалась, чтобы убедиться, что она загружена).

Так что мой вопрос двоякий:

  • Может ли кто-нибудь определить, что не так в моем запросе, что он продолжает передавать путь (/spgen) в серверное приложение?
  • Кто-нибудь может объяснить, почему я иногда получаю ошибку «Плохой запрос»?

ТИА!

Комментарии:

1. Не ответ на ваш вопрос, но, чтобы удовлетворить мое любопытство, в чем причина использования такой старой версии HAProxy?

2. Это было то, что было доступно в репозиториях rhel. В итоге я скомпилировал 2.2 и использовал более новые наборы правил, чтобы заставить его работать.

Ответ №1:

Ваш код работает на меня и удаляет /spgen/. Ваше reqrep правило указывает, что оно удалит /spgen/ с завершающей косой чертой, поэтому оно не будет применяться к /spgen без завершающей косой черты.

Для тестирования я настроил среду компоновки Docker с HAProxy в качестве балансировщика нагрузки и jmalloc/echo-сервером в качестве веб-сервера. Эхо-сервер отображает сообщение HTTP-запроса, поэтому легко увидеть детали.