Como bloquear o acesso a pastas quando houver um arquivo específico - NGINX

1

Eu tenho uma pergunta. É possível bloquear o acesso a todos os arquivos na pasta se a pasta contiver um arquivo específico, por exemplo? %código%. 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 tenho tentado 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 simples no navegador)

Saudações.

    
por user461339 19.03.2018 / 09:19

2 respostas

2

Eu tenho medo 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, basta ir com isto:

location ~ /(folder1|folder2|folder3|...) {
        deny  all;
}

Dessa forma, você não precisará criar um novo local sempre que quiser bloquear uma pasta. Basta adicionar a pasta à lista e você estará pronto para usar.

    
por 19.03.2018 / 10:00
1

Quando nomes de diretório são desconhecidos ou mudam permanentemente - é possível usar a resposta @Bert para gerar configurações separadas com nomes coletados via script bash e executá-los pelo cron.

1. O script para encontrar diretórios e coletá-los na configuração 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. Inclua 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 toda noite (crontab -e):

30 3 * * * /path/script.sh
    
por 20.03.2018 / 19:48