web-dev-qa-db-ja.com

Nginx-URLを参照することによってのみフォルダディレクトリへのアクセスを許可する

フロントエンドWeb開発者はこちら。事前に申し訳ありません。

私の会社は、 WP Engine によって提供されるNginxを実行しているWebサーバーにソフトウェアの新しいビルドを保存したいと考えています。

これらのビルドのファイルパスはcompany.com/downloads/file.Zipになります。 お客様のログインゲートの背後にある特定の参照URLからのファイルでない限り、このフォルダー内のファイルへのアクセスを制限したいと思います。

  • ユーザーが許可されたリファラーから/downloads/内のファイルへのリンクをクリックすると、ユーザーはファイルを取得します
  • ユーザーが他のソースからのリンクをクリックした場合は、404を返すか、ホームページにリダイレクトします
  • 空のリファラーまたは直接アクセスを試みた場合は、404を返すか、ホームページにリダイレクトします

画像のホットリンクを防ぐためのリソース(.Zipファイルを処理します)を見つけました。これは私にとってはうまくいくかもしれませんが、この言語の構文についてのヘルプが必要です。おそらくそれはたくさん間違っています。

location ~ /downloads/$ {
valid_referers none blocked ~.allowed_domain.com;
if ($invalid_referer) {
return 404;
}
}

WPエンジンではNginxコードを自分で追加することはできないため、実装するコードを送信する必要があります。誰かがこれを行う方法を知っていて、私を助けることができるなら、私はそれを本当に感謝します!

1
Jesse Rogers

他の可能性は X-Accel ヘッダーを使用することです。私はあなたのユースケースを知らないので、それは適切ではないかもしれません。

X-Accelはnginx固有のヘッダーです。 PHPスクリプト-header("X-Accel-Redirect: /private-downloads/magic.iso")のように)でそのヘッダーを発行できます。nginxがこのヘッダーを認識すると、magic.isoにあるファイル/data/private-downloadsのコンテンツをサーバーします。

したがって、あなたのタスクは、認証をチェックし、X-Accelヘッダーで応答するか、ログイン画面にリダイレクトするdownload.phpを準備することです。

Nginx.confでの/private-downloads/の定義

location /private-downloads/ {
    internal;    # this
    alias /data/private-downloads;
    # this should be located outside of HTTP server root
}

詳細については、serverfaultでx-accelの質問を確認してください。 1

1
Věroš K.

valid_referersnginxディレクティブを使用できます。 ( nginx doc

location /downloads/ {
    alias /var/www/downloads;
    valid_referers  www.example.me ;

if ($invalid_referer) {
        return 404;
    }
}

X-Accelヘッダー を使用することを好むため、私は個人的にこれを本番環境で試したことはありません。 PHPスクリプトでユーザーを確認してから、nginxヘッダーX-accelを送信できます。ヘッダーはnginxに静的ファイルをnginxでサーバーするように要求します。

0
Věroš K.