アルバムによって音楽がレイアウトされている小さな閉じたサイトがあり、サイトユーザーはブラウザから直接これらのアルバムを聴く機会があります。 サーバーでは、アルバムはディレクトリの形式で保存され、その中には音楽自体が保存され、プレーヤーの要求に応じてnginxに提供されます。
ユーザーが好きなアルバム全体を自分のコンピューターにダウンロードするまで、すべてがうまくいきました。
猫の下で、これをどのように実装したかを説明します。
頭に浮かぶ最初の決定は、各アルバムのアーカイブを作成してユーザーに提供することです。
このオプションを放棄した主な理由は、たくさんの音楽があり、各アルバムのアーカイブを作成することは、ディスク容量に2を掛ける必要があることを意味します。
リクエストに応じて、その場でアルバムのアーカイブを作成することが理想的であるように思われました。 アーカイブの作成時に圧縮をオフにすると、オーバーヘッドは小さくなりますが、コスト自体は特に重要ではありません。現時点では、永続的なストレージとは異なり、CPU時間とRAMが大量に供給されています。
nginxや他の既成のソリューションのモジュールを検索しても結果は得られませんでした-自分で実装します-タスクは難しくありません。
アーカイブには、圧縮せずに標準の
zipプログラムを使用し、データをファイルに書き込みませんが、
stdoutに直接送信します。 この目的で
tarを使用する方が論理的ですが、通常のユーザーがいて、多くの人にとってtarまたはtar.gzアーカイブをどうするかは謎です。
ここで、圧縮データをnginxに何らかの方法で転送する必要があります。これにより、ユーザーに提供されます。
これらの目的のために、単純なcgi-scriptがシェルに書き込まれました。
スクリプトは簡単です。追加のコメントは不要だと思います。
ディレクトリ名はurlエンコードされているため、デコードします。これには
sedと小さなスクリプトを使用するため、
ここでスクリプトを取得してcgi-scriptの横に配置します。
nginxは
FastCGIをサポートし、
CGIをサポートしないことを誰もが知っているので、スクリプトは引き続き機能するため、
Fcgiwrapを使用し
ます 。
私たちは置きます:
apt-get install fcgiwrap
そして構成する:
nginxを再起動すると、次を使用できます:
/download.cgi? ダウンロードディレクトリ名