несколько reqirep haproxy

У меня установлен haproxy 1.4, и мне нужно настроить обратный прокси-сервер в haproxy.conf, который перезаписывает URL-адрес с www.somedomain.com на www.otherdomain.com/bla/ble. конфигурация, которую я пишу, находится здесь:

acl                     cpol_acl hdr_dom(host) -i www.somedomain.com
use_backend             cpol_srv if cpol_acl


backend cpol_srv
    balance                 leastconn
    mode                    http
    option                  httplog
    stick                   on src
    stick-table             type ip size 10240k expire 60m
    reqirep                 ^([^\ :]*)\ /(.*)       \1\ /bla/ble\2
    reqirep                 ^Host:\ www.somedomain.com Host:\ www.otherdomain.com
    server                  cpol_srv www.otherdomain.com check port 80

Это работает, но URL-адрес в браузере перезаписывается на www.otherdomain.com/bla/ble, а это не то, что я хочу. Если я уберу линию

reqirep                 ^([^\ :]*)\ /(.*)       \1\ /bla/ble\2

Я могу перенаправить только на хост www.otherdomain.com, но URL-адрес в браузере остается с www.somedomain.com.

Есть ли способ сделать этот тип обратного прокси без перезаписи URL-адреса браузера?

PS: Я бы использовал этот стиль Apache (который работает), но машина не имеет NAT для внешнего мира и может общаться только с haproxy.


person user1866725    schedule 30.11.2012    source источник


Ответы (1)


Что ж, через некоторое время я понял, что нужно делать.

Недостаточно изменить только запрос, но также необходимо изменить ответ на исходный запрашивающий хост. Также был сделан acl для предотвращения повторения части url каталога "/ bla / ble". Придерживаясь приведенного выше примера, это должно быть сделано так:

    acl                     cpol_acl hdr_dom(host) -i www.somedomain.com
    use_backend             cpol_srv if cpol_acl


backend cpol_srv
    balance                 leastconn
    mode                    http
    option                  httplog
    stick                   on src
    stick-table             type ip size 10240k expire 60m
    **acl                     no_redir url_beg   /bla/ble/**

    reqirep                 ^Host:\ www.somedomain.com Host:\ www.otherdomain.com
    reqirep                 ^([^\ :]*)\ /(.*)       \1\ /bla/ble\2   **if !no_redir**


    **rspirep                 ^([^\ :]*)\ (.*)www.otherdomain.com/bla/ble/(.*)    \1\ \2www.somedomain.com/\3**

    server                  cpol_srv www.otherdomain.com check port 80
person user1866725    schedule 23.01.2013