Конфигурация HAProxy и URL Rewriting

Я хотел бы спросить, как HAProxy может помочь в запросах маршрутизации в зависимости от частей URL.

Чтобы дать вам обзор моей установки, у меня есть машина HAProxy и два бэкэнда:

  • Веб-сайт IIS (основной сайт)
  • Блог Wordpress на NGINX (дочерний сайт)

Пример использования:

Я рассчитываю направить запросы в зависимости от URL-адреса:

  • www.website.com/lang/index.aspx → основной сайт
  • www.website.com/lang/blog/articlexx → блог-сайт

URL-адрес доступа к блогу: "/server/blog/lang/articlexx", поэтому мне нужно переписать исходный запрос клиента в этот формат, который в основном переключает "блог" и "lang".

Из того, как я понял конфигурационную документацию и некоторые сообщения в сети, я мог использовать reqrep/reqirep для изменения HTTP-заголовков запроса до того, как он будет передан в бэкэнд. И если это правильно, то эта конфигурация должна работать:

frontend vFrontLiner
    bind            x.x.x.x:x
    mode            http
    option          httpclose
    default_backend iis_website

    # the switch: x/lang/blog -? x/blog/lang
    reqirep ^/(.*)/(blog)/(.*) /if\2/\1/\3

    acl blog path_beg -i /lang/blog/

    use_backend blog_website if blog


backend blog_website
    mode    http
    option  httpclose
    cookie  xxblogxx insert indirect nocache
    server  BLOG1 x.x.x.x:80 cookie s1 check inter 5s rise 2 fall 3
    server  BLOG2 x.x.x.x:80 cookie s2 check inter 5s rise 2 fall 3 backup

Проблема:. Запросы, полученные блоком blog_website, все еще являются исходным URL-адресом "x/lang/blog".

Возможно, я что-то пропустил в части регулярного выражения, но моя главная проблема заключается в том, правильно ли я понимаю или не использовать reqirep в первую очередь. Я был бы признателен за любую помощь.

Большое спасибо.

Ответ 1

Ваше регулярное выражение неверно, вы предполагаете, что сервер находится в пути запроса. Чтобы сопоставить пути запроса в заголовках, используйте регулярное выражение, подобное этому:

reqrep ^([^\ ]*)\ /lang/blog/(.*) \1\ /blog/lang/\2

вы также можете использовать reqirep, но это полезно, только если ваши серверы действительно служат /BLog/lAnG/.

Ответ 2

Если это все еще не работает, переключитесь на стабильную версию, например. на данный момент reqrep разбит на 1,5 dev. Переключено на 1.4 для исправления.