DeleGate 9.5.6 で別サーバの Web サイトをマウントする
SERVER
DeleGate とは
DeleGate は、電子総合技術研究所 の佐藤豊さんが作成した多目的プロトコル中継システムです。 これを利用することで、内部ネットワークと外部ネットワークの分離や、内部ネットワークに用意した Web サーバを DeleGate 経由で外部へ公開したりすることが出来ます。
今回は HTTP の特定のディレクトリ以下を別のサーバに担わせてみようと思って、現時点での最新版である DeleGate 9.5.6 をインストールしてみることにしました。
DeleGate 9.5.6 のインストール
DeleGate Home Page (www.delegate.org) から、2007/06/30 の時点での最新版である DeleGate 9.5.6 ( delegate9.5.6.tar.bz2 ) のソースファイルをダウンロードしたら、次のようにして展開します。
tar xvjf delegate9.5.6.tar.gz
続いて出来上がったディレクトリへ移動して、ソースファイルをコンパイルします。
cd delegate9.5.6/
make
すると、次のように管理者のメールアドレスを尋ねられるので入力します。
Enter your E-mail address [user@my.domain]:
ここで入力したアドレスが DeleGate 管理者のメールアドレスとなりますので、環境に応じて設定しましょう。このメールアドレスは anonymous-FTP へアクセスする際などにも使用するとのことでした。
メールアドレスの指定も終わって、確認に対して [y] キーを押して続行すれば、少しして DeleGate のコンパイル作業は完了です。
コンパイルが完了すると src/ ディレクトリ内に "delegated" という実行可能ファイルが出来上がるので、それを次のようにして /usr/local/sbin/ などにコピーしてあげればひとまずのインストール作業は終了です。
cp src/delegated /usr/local/sbin/
HTTP で別サーバの URL をマウントする
"main-host" をメインの Web サーバとして、その中の /sub ディレクトリ以降だけを "sub-host" に担わせるということをやってみようと思います。
なお、以下では daemontools で動作させることを想定しています。そのため "exec" コマンドによって DeleGate を起動させるとともに "-f" オプションを指定してフォアグラウンドでの動作をさせていることと、標準出力にエラー出力を合わせるための "2>&1" も付加してあります。DeleGate そのものの機能で動作させる場合はこれらの記述は不要なはずです。
daemontools に関しては EZ-NET: Slackware 10.0 へ daemontools を組み込んでみる や EZ-NET: DeleGate 9.1.1 を daemontools で起動させる などを参考にしてみてください。
異なるサーバで DeleGate を稼動させる場合
別サーバの URL を合わせるためには MOUNT という命令を使用します。
まずは話を簡単にするため、DeleGate は Web サーバとは別の "delegate-host" で動作させることにします。その場合、たとえば次のような感じのスクリプトを実行すればそれを実現することができるようになります。
#!/bin/sh
DELEGATE="/usr/local/sbin/delegated -f -v"
PORT=80
REACHABLE="*"
RELIABLE="*"
exec ${DELEGATE} -P${PORT} \
REACHABLE=${REACHABLE} \
RELIABLE=${RELIABLE} \
SERVER="http" \
MOUNT="/sub/* http://sub-host/* cache=no" \
MOUNT="/* http://main-host/* cache=no" \
2>&1
このようにすることで、DeleGate が稼動している "delegate-host" へたとえば "http://delegate-host/sub/" のようにアクセスすると "http://sub-host/" へアクセスしたのと同じ情報が表示されるようになります。ここでさらに "http://delegate-host/outer/styles/default.css" などという深い URL を指定しても、しっかりと "http://sub-host/styles/default.css" を取得してくれます。
"/sub" 以外のディレクトリへアクセスした場合には、たとえば "http://delegate-host/scripts/function.js" を指定すれば、その場合は "http://main-host/scripts/function.js" へと引き継がれます。もちろん "http://delegate-host/" の場合にも "http://main-host/" のデータが取得されます。
なお、DeleGate は Proxy サーバなので、その際には HTTP リダイレクトではなく、DeleGate が代理で MOUNT 先のサイトから情報を取得してくれます。
その結果を DeleGate 自身が直接ブラウザに返すので、ブラウザからしてみれば上記のどの場合であっても、2 つのサイトを行き来している意識はなく、まさに 1 つの "http://delegate-host/" サイトにアクセスしているように感じられます。
DeleGate と Web を同じサーバで稼動する場合
DeleGate だけを専用のサーバで稼動させるというのも贅沢なので、今度は "main-host" で DeleGate を動作させる方法を考えます。
このとき、ブラウザからの要求を待ち受けて適切なサイトへ振り分けるのは DeleGate の役目なので、80/TCP ポートは DeleGate に割り振る必要があります。そのために、同じサーバ上で稼動する Web サーバには 80/TCP 以外のポートを割り当てる必要が出てきます。
今回はとりあえず 81/TCP を割り当てることにしておきます。
そうした上でスクリプトを調整すると、次のような感じになりました。
#!/bin/sh
DELEGATE="/usr/local/sbin/delegated -f -v"
PORT=80
REACHABLE="*"
RELIABLE="*"
exec ${DELEGATE} -P${PORT} \
REACHABLE=${REACHABLE} \
RELIABLE=${RELIABLE} \
SERVER="http" \
MOUNT="/sub/* http://sub-host/* cache=no" \
MOUNT="/* http://=:81/* cache=no" \
2>&1
変わったところといえば、DeleGate 自体は "main-host" 上で稼動していることと、スクリプトでは 2 つめの MOUNT のところでしょうか。
MOUNT="/* http://=:81/* cache=no" \
特に大きく変わったところといえば、接続先の URL のところです。"http://=:81/*" となっているところの "=" は、アクセスしてきた URL と同じものということです。ポート番号が違うだけで Web サーバも同じサーバで稼動しているので、このような指定になっています。
そして異なるポートについては ":81" によって 81/TCP であることを示しています。
これでたとえば "http://main-host/" へ接続すれば、"http://main-host:81/" の情報を取得することが出来るようになります。