2012-11-30 6 views
2

haproxy 1.4가 설치되어 있고 www.somedomain.com에서 www.otherdomain.com/bla/ble으로 URL을 다시 작성하는 haproxy.conf에서 역방향 프록시를 구성해야합니다. 이 노력하고 있지만, 브라우저에서 URL이 www.otherdomain.com/bla/ble에 다시 않습니다여러 reqirep haproxy

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 

하고 내가 원하는 게 아니에요 : 내가 쓰고 구성이 여기에있다. 내가 선을

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

을 제거하면 난 단지 호스트 www.otherdomain.com에 전달할 수 있지만 브라우저에서 URL은 www.somedomain.com로 유지됩니다.

브라우저 URL을 다시 작성하지 않고 이러한 역방향 프록시를 수행 할 수있는 방법이 있습니까?

추신 : 나는이 아파치 스타일 (작동)을 할 것이지만, 기계가 바깥 세상에 NAT를 가지고 있지 않으며, 오직 haproxy와 만 통신 할 수있다.

답변

2

글쎄, 잠시 후에 나는 무엇을해야하는지 알아 냈습니다.

요청을 변경하는 것만으로는 충분하지 않지만 응답을 원래 요청한 호스트로 다시 변경해야합니다. 또한 디렉토리 URL 부분 "/ bla/ble"의 반복을 방지하기 위해 acl로 만들었습니다. 위의 예를 고집하면 다음과 같이 수행해야합니다.

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 
관련 문제