当特定文件存在时如何阻止对文件夹的访问 - 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

相关内容