GLANTANKでWebサーバを立て、DynDNSで公開していました。更にApacheでName Based Virtual Hostを設定し、SVNサーバも運用していました。具体的には例えば、
-
foo.dyndns.org:80
www.foo.dyndns.org:80
svn.foo.dyndns.org:443
といったような3つの Host(VirtualHost) を1つの GlobalIP で DynamicDNS の WildCard オプションを利用して運用していた訳です。
で、さらに bar.foo.dyndns.org:80 へのアクセスを、LAN 内の別サーバにアクセスさせたいという要望がでてきました。
そこでリバースプロキシとして Pound を導入することにしました。Squidなどでもリバースプロキシとして動作させることが可能ですが、フォワードプロキシやキャッシュ機能は不要なので。
Pound はロードバランサー、リバースプロキシ、SSLラッパなどの機能を持ち、例えば80へのアクセスを他のサーバへ振り分けたり、SSL対応でないサーバへのアクセスを肩代わりしてSSLアクセスできるようにしたりできます。
まずApacheを別ポートへ変更するか、他の IPで動作させる必要があります。今回は ipalias を使うことにしました。ipalias を利用することで 1 つの NIC に仮想的な2つ以上の IPアドレスをつける事が出来ます。GLANTANKの場合は特にカーネルの再構築をせずとも ipalias が利用できました。
これを利用して eth0 に 192.168.0.100,192.168.0.101 という IPアドレスを追加し、0.101 の方でApache2 を動作させることにします。
/etc/apache2/ports.conf を修正し、
Listen 80
を
Listen 192.168.0.101:80
などと Listen したい IPアドレスを含めて指定するようにします。もちろんVirtualHost設定も適切に修正し、apache2ctrl restart で再起動させます。これでApache側は準備できました。
Pound側の設定は、/etc/pound/pound.cfg に
UrlGroup “.*”
RequireHead Host “.*bar.foo.dyndns.org.*”
BackEnd 192.168.0.190,80,1
EndGroup
と追加します。BackEnd の部分は、アクセスさせたいサーバのIPアドレスとポート、を指定します。負荷分散させたい場合にはこれを複数指定して最後の優先度パラメータを適切に設定してあげればよいのですが、単なるリバースプロキシとして動作させたいだけなので1つだけ。
これで、192.168.0.190:80 へ bar.foo.dyndns.org というアドレスでアクセスできるようになります。
ただし、バックエンドサーバのアクセスログに記録されるIPアドレスがリバースプロキシのものになってしまいます。これを避けるにはバックエンド側の Apache に mod_rpaf を導入すれば簡単なようです。