Как сделать так, чтобы перенаправление SSL HAProxy и перезапись пути (с помощью reqrep) работали одновременно? - PullRequest
0 голосов
/ 30 июня 2018

Мне нужно развернуть разные приложения в одном домене, поэтому я настроил backend для перезаписи URL с reqrep ^([^\ ]*\ /)appA[/]?(.*) \1\2. Это работает, когда я только развертываю версию приложения HTTP или HTTPS.

Однако, если я попытаюсь перенаправить весь HTTP-трафик на HTTPS, это не сработает. Проблема в том, что HAProxy уже переписал URL и удалил часть /appA перед перенаправлением. Таким образом, если я попытаюсь посетить http://myserver.com/appA, страница https://myserver.com в конечном итоге будет запрошена вместо https://myserver.com/appA.

Я не могу поместить правило перенаправления перед правилом reqrep, так как кажется, что HAProxy должен обработать все перезаписи до перенаправлений.

Что я могу сделать, чтобы моя конфигурация работала так, как я планировал? Это должно быть очевидно, но я не могу найти подходящий ответ в Интернете.

Моя конфигурация:

frontend http_front
  bind *:80
  reqadd X-Forwarded-Proto:\ http
  acl appA_url url_beg /appA
  use_backend appA if appA_url

frontend https_front
  bind *:443 ssl crt /etc/haproxy/certs/myserver.com.pem
  reqadd X-Forwarded-Proto:\ https
  acl appA_url url_beg /appA
  use_backend appA if appA_url

backend appA
  reqrep ^([^\ ]*\ /)appA[/]?(.*)     \1\2
  redirect scheme https if !{ ssl_fc }
  balance roundrobin
  server web1 127.0.0.1:5001 check

1 Ответ

0 голосов
/ 30 июня 2018

Используйте директивы http-request, которые обрабатываются в порядке объявления. Они также являются более новыми функциями и, как правило, более чистыми, более интуитивными, более гибкими и более эффективными по сравнению с reqxxx.

http-request redirect scheme https if ! { ssl_fc }
http-request set-path %[path,regsub(^/appA/,/)]

См. http-request. Требуется 1.6 или более поздняя версия, где доступен конвертер regsub().

...