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
複数のサーバからの書庫を構成するために以下のステップを使うことができます:
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
}
--with-http-debug flag
Thanks to box.com for sponsoring the initial development of mod_zip and to vtunnel.com for sponsoring byte-range support.