ngx_http_secure_download_module - ある時間が来るまでのみ有効なリンクを作成することができるモジュール。方法はlighttpdのmod_secdownloadに似ていますが、完全に同じではありません。
構文: | secure_download_secret <secret string> |
---|---|
デフォルト: | none |
コンテキスト: | 場所 |
md5ハッシュに含む文字列を定義します。変数を含むこともできます。
構文: | secure_download_path_mode [ file | folder ] |
---|---|
デフォルト: | folder |
コンテキスト: | 場所 |
md5ハッシュがファイル名を含むフルパスで行われなければならないか、あるいはファイル名無しでファイルを含むフォルダで行われなければならないかを定義します。これは、リンクがディレクトリ全体に関して有効か、あるいは一つのファイルに関してのみ有効かに依存します。
注意
これが動作する方法は、単純にもし folder
を指定した場合は、アクセスされたパスの最後の部分を落とし、残りをハッシュにします。このことは、もしindex.htmlあるいはrewritingのようなものを期待してファイル名を指定しないパスを使う場合、 フルパスに一致するさせるためにfile
を使ったほうが良いことを意味します。
この変数はリクエストURLの検証プロセスの結果を含みます。それは常に数字を含み、以下のいずれかの値を持つことができます。
生成されたURIは以下の書式を持つ必要があります:
<real_path>/<md5_hash>/<expiration_timestamp>
md5 ハッシュは以下の文字列から生成されている:
<real_path>/<secret (user supplied)>/<expiration_timestamp>
real_path
はアクセスしたいファイルのパスか、そのファイルを含むフォルダのパスのどちらかで、これら2つのどちらかはNGINX configの中で定義されなければなりません。secret
はNGINX設定とリンク生成スクリプトのどちらかによって知られている必要があるランダムな文字列です。expiration_timestamp
は16進のunix_timestamp(1970から始まる秒)です。/somefolder/protected.html
のパスの下のドキュメントルートの中にファイルがあるとします。ここで、20分で期限切れになるリンクを生成したい場合、以下のことをします:
1240928342
だったとします。49F71056
です。/somefolder/protected.html/privatestring/49F71056
which consists of <real path/secret string/timestamp in hex
f901b5272c17b456fabf49c3e9bcc120
に違いありません。<real_path>/<md5>/<timestamp>
の形式に配置するだけでよいです。例においては/somefolder/protected.html/f901b5272c17b456fabf49c3e9bcc120/49F71056
のようになります。ここで、設定は以下のようになります:
location /somefolder {
secure_download on;
secure_download_secret IAmSalt$remote_addr;
secure_download_path_mode file;
if ($secure_download = "-1") {
rewrite /expired.html break;
}
if ($secure_download = "-2") {
rewrite /bad_hash.html break;
}
if ($secure_download = "-3") {
return 500;
}
rewrite ^(.*)/[0-9a-zA-Z]*/[0-9a-zA-Z]*$ $1 break; // crop all the /hash/time stuff off the url
}
OR:
location /secured {
secure_download on;
secure_download_path_mode file;
secure_download_secret DontCopyMyPics$remote_addr;
if ($secure_download !~ "^-.") {
rewrite ^/secured(.*)/[0-9a-zA-Z]*/[0-9a-zA-Z]*$ $1 last;
}
if ($secure_download = "-1") {
rewrite . /static/expired.html last;
}
if ($secure_download = "-2") {
rewrite . /static/bad_hash.html last;
}
return 500;
}
location / {
internal;
root html;
}
location /static {
root static;
}
このモジュールを含むNGINXをコンパイルするには、以下に従う必要があります:
何かバグを見つけた場合は、私にメールをしてください。手助けをするつもりでいます。
このモジュールを使っている場合、どのような種類のフィードバックあるいは問題の報告も歓迎します。
エラーログのログレベルをdebugにした場合は何らかの意味がある出力を出すようにしました。
Mail: mauro.stettler(A.T)gmail.com