如何在特定檔案存在時阻止對資料夾的存取 - NGINX

如何在特定檔案存在時阻止對資料夾的存取 - NGINX

我有一個問題。如果資料夾包含特定檔案(例如.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 設定中,例如在「伺服器」部分:

include nginx-block-directories.conf;

3. 每晚刷新 nginx 設定(crontab -e):

30 3 * * * /path/script.sh

相關內容