特定のファイルが存在する場合にフォルダーへのアクセスをブロックする方法 - NGINX

特定のファイルが存在する場合にフォルダーへのアクセスをブロックする方法 - NGINX

質問が 1 つあります。フォルダーに特定のファイル (例 ) が含まれている場合、フォルダー内のすべてのファイルへのアクセスをブロックすることは可能ですか.block。次の点に注意してください。

location ~ \.(mp3|log|txt|rtf|doc|docx)$ {
    deny all;
    return 404;
}

可能であれば、どのようにすればよいでしょうか?

私は以下を試しました:

location ~ \.block {
    deny all;
    return 404;
}

ただし、この機能は .block ファイルのみを制限し、フォルダー内のファイルは制限しません (ダウンロードしたり、ブラウザーで開いたりすることは可能です)

ご挨拶申し上げます。

答え1

残念ながら、あなたが実現しようとしていることは、NginX のデフォルトでは存在しません。IF ステートメントを使用することもできますが、ご存知のとおり... IFISEVIL

これらのファイルを手動で追加するので、次のようにすればよいのです:

location ~ /(folder1|folder2|folder3|...) {
        deny  all;
}

こうすれば、フォルダーをブロックするたびに新しい場所を作成する必要がなくなります。このリストにフォルダーを追加するだけで準備完了です。

答え2

ディレクトリ名が不明であるか永続的に変更される場合、@Bert の回答を使用して、bash スクリプトを介して収集された名前で個別の構成を生成し、cron で実行することができます。

1. ディレクトリを見つけて nginx 設定に収集するスクリプト。

#! /bin/bash

# Search directories with file '.block' and collect them in a variable. 
# Format dir1|dir2|dir3   
DIR_NAMES=$(find ~/temp -type f -name '.block' -printf '|%h')

# remove first "|"
DIR_NAMES=${DIR_NAMES#?}

# generate new config with names
echo "location ~ /($DIR_NAMES) {
  deny  all;
}" > nginx-block-directories.conf

# reload nginx with a new config
sudo nginx reload

2. 生成された設定をメインの nginx 設定に含めます (例: "server" セクション)。

include nginx-block-directories.conf;

3. 毎晩 nginx の設定を更新します (crontab -e):

30 3 * * * /path/script.sh

関連情報