mod_proxy_ftp
mod_proxy
のための FTP サポートモジュール
Extension
mod_proxy_ftp.c
proxy_ftp_module

本モジュールには mod_proxy が必要です。 本モジュールは FTP サイトへのプロキシ機能を提供します。 現状、 FTP サポートは GET メソッドに限定されていることに注意してください。

FTP プロキシリクエストを扱うためには、mod_proxy と mod_proxy_ftpが サーバに組み込まれて いなければいけません。

# 警告

安全なサーバにするまでプロキシ機能は有効にしないでください。 オープンプロキシサーバはあなた自身のネットワークにとっても、 インターネット全体にとっても危険です。

mod_proxy

# なぜファイルタイプ xxx は FTP ダウンロードできないのでしょう?

おそらく、プロキシの mime.types 設定ファイルでそのファイルタイプを `application/octet-stream` として定義していないのでしょう。 以下の行が便利でしょう。

    application/octet-stream   bin dms lha lzh exe class tgz taz

デフォルトで全てをバイナリにするのもいいかもしれません:

    DefaultType application/octet-stream

# ファイル xxx を ASCII モードで FTP ダウンロードさせるにはどうすればいいのでしょう?

稀に、特定のファイルを FTP の `ASCII` 転送モードでダウンロードしなければ ならない場合があります (なお、デフォルトの転送モードは `binary` です)。 この場合、リクエストの末尾に `;type=a` を加えることで mod_proxy のデフォルト動作を変更して、 ASCII 転送モードにできます。 (一方、 FTP のディレクトリ一覧は常に ASCII モードです。)

# FTP アップロードはできますか?

現状、 mod_proxy は FTP の GET のみサポートしています。 もちろん、 Apache プロキシで HTTP アップロード (POST または PUT) はできます。

# ホームディレクトリ外のファイルに FTP アクセスするにはどうすればよいでしょうか?

FTP の URI はログイン中のユーザのホームディレクトリの相対パスとして 解釈されます。より上位のディレクトリに行くために /../ を使っても無駄です。 と言うのも、ドットふたつはブラウザが解釈するだけで、実際に FTP サーバには 送られないからです。この問題に対して、 Apache の FTP プロキシは いわゆる Squid %2f hack を実装しています; Squid Proxy Cache などの 他の有名なプロキシサーバも採用している解決方法です。 リクエストのパスの先頭に `/%2f` をつけると、これらのプロキシ は FTP のディレクトリを `/` 開始にします (ホームディレクトリではなく)。 例えば、`/etc/motd` ファイルを取得するには、次の URL を 使えばよいでしょう:

ftp://user@host/%2f/etc/motd

# ブラウザの URL 欄に FTP のパスワードがそのまま 載らないようにするにはどうすればよいでしょうか?

FTP サーバにユーザ名とパスワードを使ってログインするために、 Apache は異なる戦略を使います。 URL にユーザ名もパスワードも無ければ、 Apache は FTP サーバに匿名 (anonymous) ログインしようとします。 例

user: anonymous
password: apache_proxy@

匿名アクセスを設定したすべての有名な FTP サーバでこれは動作します。

特定のユーザ名でログインするために、 URL に次のようにユーザ名を埋め込めます:

ftp://username@host/myfile

FTP サーバがこのユーザ名に対してパスワードを求めると (そうあるべきです) 、 Apache は `401` (Authorization required) レスポンスを返します。 これによりブラウザはユーザ名とパスワードを求めるダイアログ画面をポップアップします。 パスワードを入力すると、もう一度接続しなおし、認証が成功すると、 要求していたリソースが現れます。このやりとりの利点は、ブラウザがパスワードを そのまま表示しないことです。もし最初に次の URL を使っていると

ftp://username:password@host/myfile

パスワードがそのまま見えてしまいます。

## 注意

このように送信するパスワードはネットワーク上は暗号化されません。 ブラウザと Apache プロキシサーバの間は base64 エンコードした生パスワードで、 Apache プロキシサーバと FTP サーバの間はプレインテキストです。 このため、 HTTP 経由で FTP サーバにアクセスする時 (とにかく FTP で個人的な ファイルにアクセスする時 ) 、倍の慎重さが求められます。 安全でないネットワークを使っている場合、経路上でパスワードを盗み取られる 可能性があります。