Zip

説明

mod_zip - 動的にZIP書庫を組み立てるNGINXのためのHTTPモジュール。簡単な設定の場合、mod_zipはローカルファイルシステム上のファイルのリストを取り、1つのZIP書庫としてそれらを提供するでしょう。もっと複雑なセットアップでは、mod_zipはupstreamサーバからNGINXのネイティブプロキシコードを使って構成ファイルをストリームすることができます。多くのZIP生成スクリプトと異なり、(一時的に)数千メガバイトの書庫を組み立てる場合であっても、プロセスは一度に数KB以上使うことはありません。

インストール

インストールするには、ソースのtarballをダウンロードし、解凍し、以下のオプションを付けてNGINXをコンパイルします:

--add-module=/path/to/mod_zip-1.x

NGINX 0.7.25 以上が必要です。

使い方

モジュールには設定ディレクティブがありません。(おそらくupstreamから)元の応答が以下のHTTPヘッダを含む場合、有効になります。

X-Archive-Files: zip

ファイルのリストの間、応答ボディを走査します。構文は、ファイルチェックサム (CRC-32)、サイズ(バイト)、場所(適切にURLエンコードされた)、およびファイル名の空白区切りのリストです。1行ごとに1ファイルです。nginx.conf内のlocationに対応するファイルの場所; ファイルはディスク上、upstreamから、あるいは他のモジュールから有り得ます。ファイル名はディレクトリのパスを含むことができ、それはZIPファイルから解凍されるものになるでしょう。例:

1034ab38 428    /foo.txt   My Document1.txt
83e8110b 100339 /bar.txt   My Other Document1.txt

ファイルは順番に処理およびエンコードされます。ファイルが見つからないかファイルリクエストがなんらかのエラーを返す場合、ダウンロードは中止されます。

リスト内の全てのファイルがCRC-32値を持つ場合、mod_zipはダウンロードのために"Range"ヘッダをサポートするでしょう。未知のCRC-32はダッシュ(“-”)を使って示されるべきです。

- 428    /foo.txt   My Document1.txt
- 100339 /bar.txt   My Other Document1.txt

リモートのupstream

複数のサーバからの書庫を構成するために以下のステップを使うことができます:

1034ab38 428    /server1/foo.txt   My Document1.txt
83e8110b 100339 /server2/bar.txt   My Other Document1.txt

location ~ "^/(?<srv>server[12])/(?<file>.*txt)" {
    proxy_pass http://$srv.domain.com/$file
}

Tips

  • クライアントにファイルに"foobar.zip"という名前を付けたい場合は、upstreamの応答の中のヘッダーに"Content-Disposition: attachment; filename=foobar.zip" をつけてください。
  • BOMArchiveHelper ('Archiver Utility') と Stuffit Expander を使った最大の互換性を持ちたい場合は、ファイルのためのCRC-32値を与えてください。
  • CRC-32フィールドの前は、各行は空白があってはなりません。At the end of the line, rn. No empty or extra lines.
  • 帯域を節約するために、upstream応答に"Last-Modified"ヘッダを追加します; mod_zipはクライアントから"If-Range"を引き受けるでしょう。
  • upstreamファイルは(例えば、Apacheによって)gzip圧縮されていないようにしてください。
  • upstreamファイルリストは最後に改行を持つようにしてください。

変更ログ

1.1

  • 1.1.6: 機能: 大きな書庫、連続するサブリクエスト、UTF-8ファイル名のためのZip64。バグ修正: URL内に空白を許可します。
  • 1.1.5: 機能: "If-Range"のサポート、ローカルファイルについてのRangeのサポート。バグ修正: NGINX 0.7.25 互換性。
  • 1.1.4: 機能: Range の終わりは任意です(例えば、"bytes=0-")。Bugfix: compilation error on FreeBSD.
  • 1.1.3: 機能: 任意のCRC-32。バグ修正: Mac OS X上での BOMArchiveHelper.app のサポート: ファイルが404を返す時にたまにクラッシュします。
  • 1.1.2: Bugfix: Compilation error with NGINX 0.6 series.
  • 1.1.1: Bugfix: Compilation error on certain platforms.
  • 1.1.0: 機能: フル byte-rangeのサポート。変更: 新規ファイルリストの構文。

1.0

  • 1.0.1: 初期公開リリース。
  • 1.0.2: Bugfix: Fixed compilation with no --with-http-debug flag
  • 1.0.3: 機能: X-Archive-Files-*ヘッダが提供された時のContent-Lengthのサポート。
  • 1.0.4: バグ修正: 書庫内の空ファイルのサポート。
  • 1.0.5: バグ修正: 2GB以上の書庫のサポート。
  • 1.0.7: Bugfix: clear outgoing “Accept-Ranges” header
  • 1.0.8: バグ修正: サブリクエストからの"Range"ヘッダの除去

バグ

Evan Millerにバグレポートを送ってください。

Google Code のmod_zip

Thanks

Thanks to box.com for sponsoring the initial development of mod_zip and to vtunnel.com for sponsoring byte-range support.

TOP
inserted by FC2 system