balancer-managerをProxyする

私が管理しているWebサーバではApache->Squid->Apache->Zopeってな具合で多段Proxyしています。
後ろ側のApacheでmod_proxyのbalancerをつかって複数のZopeインスタンスへリクエストを分配しています。

Apache --> Squid --> Apache -+-> Zope1
                             |
                             +-> Zope2
                             |
                             +-> Zope3

一番後ろのZopeに機能追加があったりして再起動するときにはApacheの設定ファイルでBalancerMemberに当たるところをいちいちコメントアウトして再起動してメンバーから外したりしていました。

    BalancerMember  http://backend1:8080
#    BalancerMember  http://backend2:8080
    BalancerMamber  http://backend3:8080

こんなふうに。
でもちょっとさすがに面倒になってきた。
mod_proxy_balancerにはたしか管理画面があったなぁと思い出して設定をいれました。これ自体はこんな簡単なものなんですが、

  <Location   /balancer-manager>
        SetHandler      balancer-manager
        Order           deny,allow
        Deny from       all
        Allow from      example.com
        Allow from      10.0.0.0/16
    </Location>

面倒なのはこのバランサ設定が入っているバーチャルホストがIPベースでしかも127.0.0.1なんですな。

<VirtualHost 127.0.0.1:80>

当然外部からは参照不可。たしかsquidが名前ベースのバーチャルホストを理解してくれないのでこうやったような気がする。

そこで外部から参照できるバーチャルホストから127.0.0.1へProxyすることにしました。

        ProxyPass         /balancer-manager http://127.0.0.1/balancer-manager
        ProxyPassReverse  /balancer-manager http://127.0.0.1/balancer-manager

これで参照できるようになった、、のはいいんですがsubmitボタンを押すとhttp://127.0.0.1/balancer-managerへリクエストがいきます。
balancer-managerのソースを参照すると、submitボタンに割り当てられているactionがこうなっています。

<form method="POST" enctype="application/x-www-form-urlencoded" action="http://127.0.0.1/balancer-manager">

mod_proxyのソースを眺めると、action=以下の文字列はhttp+サーバ名+balancer-managerにしているみたい。まぁそりゃそうです。
ソースをいじくって修正してもいいんですが、設定ファイルでなんとかすることに。
mod_sedを使います。
先ほど出てきたをこんな風に設定。

    <Location   /balancer-manager>
        AddOutputFilterByType   Sed text/html
        OutPutSed       "s/http:\/\/127.0.0.1//g"
        SetHandler      balancer-manager
        Order           deny,allow
        Deny from       all
        Allow from      localhost
    </Location>

出力されるソースから"http://127.0.0.1"を削除。AddOutputFilterだと"/balancer-manager"のようにサフィックスがないリクエストには対応できないようなのでAddOutputFilterByTypeで設定。
こうするとsubmitに対応しているactionは以下のようになります。

<form method="POST" enctype="application/x-www-form-urlencoded" action="/balancer-manager">