Eu tenho uma pergunta. É possível bloquear o acesso a todos os arquivos da pasta se a pasta contiver um arquivo específico, por exemplo .block
. Eu sei que posso contar com:
location ~ \.(mp3|log|txt|rtf|doc|docx)$ {
deny all;
return 404;
}
Se for possível, como fazer isso?
Eu tentei com:
location ~ \.block {
deny all;
return 404;
}
Mas esta função restringe apenas o arquivo .block, não os arquivos dentro da pasta (ainda disponível para download ou aberto no navegador)
Saudações.
Responder1
Receio que o que você está tentando alcançar não esteja presente no NginX por padrão. Você poderia usar uma instrução IF, mas você sabe.... IFISEVIL
Como você adiciona esses arquivos manualmente, você pode simplesmente fazer o seguinte:
location ~ /(folder1|folder2|folder3|...) {
deny all;
}
Dessa forma, você não precisará criar um novo local toda vez que quiser bloquear uma pasta. Basta adicionar a pasta à lista desta e você estará pronto para começar.
Responder2
Quando os nomes dos diretórios são desconhecidos ou mudam permanentemente - é possível usar a resposta @Bert para gerar uma configuração separada com nomes coletados via bash-script e executá-la pelo cron.
1. O script para localizar diretórios e coletá-los na configuração do 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. Incluir a configuração gerada na configuração principal do nginx, por exemplo, na seção "servidor":
include nginx-block-directories.conf;
3. Atualize a configuração do nginx todas as noites (crontab -e):
30 3 * * * /path/script.sh