我有一個問題。如果資料夾包含特定檔案(例如.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