2

www.somedomain.comhaproxy 1.4をインストールしていて、URLをからに書き換えるリバースプロキシをhaproxy.confに設定する必要があります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とのみ通信できます。

4

1 に答える 1

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
于 2013-01-23T09:12:59.693 に答える