Конфигурация 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 для исправления.