#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-запроса, поэтому легко увидеть детали.