我有一个问题。如果文件夹包含特定文件,是否可以阻止对文件夹中所有文件的访问,例如.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