Personal tools
You are here: Home ブログ 井上 mod_proxy_balancerを使う時のProxyPassReverseの設定
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent entries
Apache2.4のリリース予定は来年(2011年)初め(あくまで予定) inoue 2010-12-23
Herokuの発音 inoue 2010-12-20
雑誌記事「ソフトウェア・テストPRESS Vol.9」の原稿公開 inoue 2010-12-18
IPA未踏のニュース inoue 2010-12-15
労基法とチキンゲーム inoue 2010-12-06
フロントエンドエンジニア inoue 2010-12-03
ASCII.technologies誌にMapReduceの記事を書きました inoue 2010-11-25
技術評論社パーフェクトシリーズ絶賛発売中 inoue 2010-11-24
雑誌連載「Emacsのトラノマキ」の原稿(part8)公開 inoue 2010-11-22
RESTの当惑 inoue 2010-11-22
「プログラマのためのUXチートシート」を作りました inoue 2010-11-19
「ビューティフルコード」を読みました inoue 2010-11-16
Categories
カテゴリなし
 
Document Actions

mod_proxy_balancerを使う時のProxyPassReverseの設定

某氏からapacheのProxyPassReverseの設定について質問を受けました。

ProxyPassReverseの内部の動作自体は簡単です。ただの文字列置換です。apacheがリバースプロキシした時、レスポンス(リバースプロキシの視点で見ると、バックエンドから来てクライアントに返すもの)のLocationヘッダ値の文字列置換です。

ProxyPassReverse /xxx http://foo:8081/yyy
<Location /xxx>
  ProxyPassReverse http://foo:8081/yyy
</Location>

上のふたつは同じ意味の違う書き方です。どちらの場合も、Locationヘッダに http://foo:8081/yyy の文字列があると、それを http://${apacheのServerName}/xxx に文字列置換します。

(理屈はわからなくても)何も考えずにProxyPassとまったく同じ並びで引数を指定しておけば、たいていは動作します。

今日、聞かれたのはmod_proxy_balancerを使った時の設定です。例えば、次のような設定です。

ProxyPass /xxx balancer://yyy

<Location>ディレクティブを使う同じ例も載せておきます。

<Location /xxx>
 ProxyPass balancer://yyy
</Location>

次のようにロードバランスの設定をしていると仮定します。

<Proxy balancer://yyy>
 BalancerMember http://1.2.3.4:8009
 BalancerMember http://1.2.3.5:8009
</Proxy>

この時のProxyPassReverseはどうすればいいのでしょうか。これが質問でした。

何も考えずにProxyPassと同じ引数を指定すると次のようになります(<Location>ディレクティブの例は省略します)。

# 候補1
ProxyPassReverse /xxx balancer://yyy

ロードバランスしたバックエンドごとに書くなら次のようになります。

# 候補2
ProxyPassReverse /xxx http://1.2.3.4:8009
ProxyPassReverse /xxx http://1.2.3.5:8009

正解は、apache2.2.12以降ならどちらでもOK、2.2.11以前なら「候補2」のみ可です。

内部的にはProxyPassReverse指定のすべてをLocationヘッダに対して文字列マッチ置換を探します。なので「候補2」は動きます。「候補1」の対応はapache2.2.12にコードが入っています(proxy_util.cのap_proxy_location_reverse_map関数)。対応するCHANGESは以下です。

*) mod_proxy: Complete ProxyPassReverse to handle balancer URL's.  Given;
     BalancerMember balancer://alias http://example.com/foo
     ProxyPassReverse /bash balancer://alias/bar
   backend url http://example.com/foo/bar/that is now translated /bash/that

「候補1」は文字列が"balancer://"の場合の特別処理が走るので「候補2」より僅かに遅いですが、誤差なので、表記が簡単な「候補1」がいいでしょう。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/lb-config/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.