Настройка перезаписи HAProxy и URL - PullRequest
12 голосов
/ 20 ноября 2011

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

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

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

Вариант использования:

Я ожидаю перенаправления запросов в зависимости от URL:

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

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

Из того, как я понял документацию по конфигурации и некоторые сообщения в сети, я мог бы использовать 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 или нет.Буду признателен за любую помощь.

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

Ответы [ 2 ]

9 голосов
/ 31 января 2012

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

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

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

0 голосов
/ 13 декабря 2012

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

...