- 下記URLからDeleGateの最新版プログラムをダウンロードする。
http://www.delegate.org/anonftp/DeleGate/bin/windows/
ユーザ名/パスワードの問い合わせには anonymous/メールアドレスを入力する。
2003/2下旬 現在、8.4.0(以下で 8_x_x の個所は 8_4_0 と読み替えること) が最新版である。
ディレクトリ latest の中に常に最新版が置いてある。
delegate.zip と dg8_x_x.zip は同じものであり、どちらかをダウンロードする。
後でバージョン管理し易いように dg8_x_x.zip の方がいいであろう。
- ダウンロードした dg8_x_x.zip(あるいは delegate.zip)を例えば
C:\Program Files\delegate に解凍する。
- C:\Program Files\delegate に delegate.batファイルを作成する(内容は以下の1行のみ)
dg8_x_x.exe +=delegate.cfg
- C:\Program Files\delegate に delegate.cfgファイルを作成する(以下は設定例)
(注)「#」以下行末まではコメントである
-- (この下の行から) ---------------------------------------------------
-P80
SERVER=http
MOUNT="/* http://192.168.0.3/* vhost=-aaa.domain.jp" #http://aaa.domain.jp/ -> http://192.168.0.3/
REACHABLE=192.168.0.3 #このホスト以外には proxyアクセスできない。公開proxyにならないため必須
MOUNT="/* http://192.168.0.4/* vhost=-bbb.domain.jp" #http://aaa.domain.jp/-> http://192.168.0.4/
REACHABLE=192.168.0.4
#MOUNT="/* http://192.168.0.3/hoge1/* vhost=-aaa.domain.jp" #http://aaa.domain.jp/ -> http://192.168.0.3/hoge1/
#REACHABLE=192.168.0.3
#MOUNT="/hoge2/* http://192.168.0.3/* vhost=-aaa.domain.jp" #http://aaa.domain.jp/hoge2/ -> http://192.168.0.3/
#REACHABLE=192.168.0.3
#MOUNT="/* http://192.168.0.3:8000/* vhost=-aaa.domain.jp" #http://aaa.domain.jp/ -> http://192.168.0.3:8000/
#REACHABLE=192.168.0.3
RELIABLE="*" #全てのホストからのアクセスを許すので用途によっては要注意
#RELIABLE="192.168.0.[0-255],*.domain.jp" #特定のホスト/ドメインからのみアクセスを許可する
ADMIN=user@host.domain.jp
-- (この上の行まで) ---------------------------------------------------
- 具体的設定例
下図は、DeleGateが動くPC1とAN HTTPDが動くPC2/PC3が別のPCのケースである。
ルータでポート80は DeleGate が動く PC1にフォワードする。
Internet
│
┏━┻━┓
┃Router┃
┃ ┃
192.168.0.2 ┗┳┳┳┛ 192.168.0.4
┌─────┘│└─────┐
│ │192.168.0.3 │
┏━━┻━━┓┏━━┻━━┓┏━━┻━━┓
┃ PC1 ┃┃ PC2 ┃┃ PC3 ┃
┃ DeleGate ┃┃ AnHttpd ┃┃ AnHttpd ┃
┗━━━━━┛┗━━━━━┛┗━━━━━┛
│ │ ↑ ↑
│ │ http://aaa.domain.jp/ │
│ │ │ http://bbb.domain.jp/
│ └───────┘ ↑
│ │
└────────────────┘
|
delegate.cfgファイル
-- (この下の行から) -------------------------------
-P80
SERVER=http
MOUNT="/* http://192.168.0.3/* vhost=-aaa.domain.jp"
REACHABLE=192.168.0.3
MOUNT="/* http://192.168.0.4/* vhost=-bbb.domain.jp"
REACHABLE=192.168.0.4
RELIABLE="*"
ADMIN=user@host.domain.jp
-- (この上の行まで) -------------------------------
一方、こちらは AN HTTPD と DeleGate が同じ PC1 で動くケース。
Internet
│
┏━┻━┓
┃Router┃
┃ ┃
192.168.0.2 ┗┳━┳┛ 192.168.0.3
┌───┘ └───┐
┏━━━┻━━┓ ┏━━┻━━━┓
┃ PC1 ┃ ┃ PC2 ┃
┃ AnHttpd ┃ ┃ ┃
┃ DeleGate ┃ ┃ AnHttpd ┃
┗━━━━━━┛ ┗━━━━━━┛
││ ↑ ↑
││http://aaa.domain.jp/ │
││ │ http://bbb.domain.jp/
│└───┘ ↑
│ │
└────────────┘
|
delegate.cfgファイル
-- (この下の行から) ------------------------------------
-P80
SERVER=http
MOUNT="/* http://192.168.0.2:8000/* vhost=-aaa.domain.jp"
REACHABLE=192.168.0.2
MOUNT="/* http://192.168.0.3/* vhost=-bbb.domain.jp"
REACHABLE=192.168.0.3
RELIABLE="*"
ADMIN=user@host.domain.jp
-- (この上の行まで) ------------------------------------
このケースではポート80番をDeleGateが使うので、PC1のAN HTTPDは80以外のポート(例えば8000)で動作させる。
内部でポートが8000であることは表には出ないので分からない。
(注) MOUNT先がバーチャルサーバ時の誤動作対応仕様の追加(8.6.6以降)。
http://www.delegate.org/mail-lists/delegate/11978
MOUNT="/* http://-hostname/* vhost=-vhostname"
- カレントディレクトリを C:\Program Files\delegate にしてコマンドプロンプトから delegate.bat を実行。
NT系のOS(WinNT/2000/XP)では DeleGate Server -P80 がサービスとして実行される。
バッチファイル(delegate.bat)を実行するといくつかの y/n の問い合わせがあるが、通常はデフォルトのままでよい。
delegate.cfgを変更したときには、再度delegate.batを実行する。
DeleGateを終了するときは delegate.bat を実行し、「Create a new service ?」で n とする。
--------------------------------------------------------------------------------
The service `DeleGate Server -P80' exists. Delete it ? [y] / n : y
Create a new service ? [y] / n : n
--------------------------------------------------------------------------------
Win9x系ではサービスではなく MS-DOSプロンプトで実行されるので、Ctrl+C で終了する。
- リンク
DeleGateメーリングリスト
- 追記
鷹の巣さんの自宅サーバ掲示板 で Delegateに関する質問があったときに、筆者が回答した内容も参考になると思います。質問者はこの後、リバースプロキシとバーチャルホストを組み合わせたいと言うので、ポートを変える方法とIPアドレスを変える方法の 2つの方法をメールで教えました。具体的な方法については質問者のページのまとめにあるのでそちらを参考にしてください。
- X-Forwarded-For
リバースプロキシにすると Webサーバから見たクライアントが、本来のアクセス元のホストではなくプロキシサーバに置き換わってしまうという現象が起きます。その結果、例えば掲示板CGIでアクセス元の IPアドレスを記録していると、それがプロキシサーバの IPアドレスになってしまい、全く意味がなくなってしまいます。
これを解決するにために以下のような対策をします。
1. DeleGateの設定(cfg)に以下の 1行を追加する
HTTPCONF="add-qhead:X-Forwarded-For:%a"
これによって DeleGateから Webサーバに X-Forwarded-For ヘッダが追加され、アクセス元の IPアドレスが通知されるようになります。
2. 掲示板CGIにおいて環境変数 HTTP_X_FORWARDED_FOR を見る
X-Forwarded-For ヘッダがあると Webサーバはそれを環境変数 HTTP_X_FORWARDED_FOR に設定します。掲示板CGIの中ではアクセス元の IPアドレスを $ENV{'REMOTE_ADDR'} で求めているはずなので、その個所を探し、それを $ENV{'HTTP_X_FORWARDED_FOR'} に書き換えます。これでリバースプロキシではなく本来のアクセス元ホストの IPアドレスが記録されるようになります。