web-dev-qa-db-ja.com

ユーザーが大きなファイルをダウンロードしないようにするにはどうすればよいですか?

NGINXで静的フォルダーを提供しています。

そのフォルダー内には60 GBの特定のファイルが1つありますが、次のようなHTTPリクエストを使用して、小さなチャンクで読み取ることのみを目的としています。

enter image description here

したがって、ユーザーがファイル全体をダウンロードしようとすると、NGINXはそれを拒否する必要があります。

いつかはこれが可能であることがわかります、例えば:

  1. HTTPリクエストヘッダーRangeが存在し、バイト範囲がXより小さいかどうかを確認します。

  2. 要求された応答ペイロードが、たとえば100MB未満かどうかを確認します。

しかし、これらのいずれかがNGINX内でどのように実装されるかはわかりません。

9
PedroD

特定の(範囲)ヘッダーの存在について、特定の場所(60GBファイルの場所)をチェックするようにnginxを構成できると思います。次に、範囲ヘッダーを含まないリクエストをブロックできます。

これらのリンクを確認できます。

https://stackoverflow.com/questions/18970620/nginx-reject-request-if-header-is-not-present-or-wrong

https://stackoverflow.com/questions/35342049/nginx-reject-request-if-header-not-present/35366796

編集

Nginx設定で複雑な条件をコーディングするのは少し問題があるようです。多分あなたはいくつかのサーバー側のスクリプトを使用して大きなファイルを提供することを検討する必要があります。 PHP。ストリーミングスクリプトの例はたくさんあります。

https://Gist.github.com/ranacseruet/982629

このようなスクリプトを使用するようにNginxを構成した後、スクリプト(範囲条件)にロジックを追加し、大きなファイルへの直接アクセスを防ぐ必要があります。

3
qba-dev

あなたが探しているものはここのスライスモジュールでカバーされています- https://www.nginx.com/resources/wiki/modules/slice/

1
Khushil