1 votes

Comment bloquer l'accès aux dossiers lorsque des fichiers spécifiques sortent - NGINX

J'ai une question. Est-il possible de bloquer l'accès à tous les fichiers d'un dossier si celui-ci contient un fichier spécifique ? .block . Je sais que je peux compter dessus :

location ~ \.(mp3|log|txt|rtf|doc|docx)$ {
    deny all;
    return 404;
}

Si c'est possible, comment faire ?

J'ai essayé avec :

location ~ \.block {
    deny all;
    return 404;
}

Mais cette fonction ne limite que le fichier .block, pas les fichiers du dossier (qui peuvent toujours être téléchargés ou ouverts dans un navigateur).

Salutations.

0 votes

Comment sont créés les fichiers .block ? Automatiquement ou manuellement par vous ? Dans ce dernier cas, je suggère de restreindre l'accès aux fodlers manuellement dans la configuration de NginX également. Si c'est automatiquement par une application web par exemple, alors (bon sang, pardonnez-moi de dire cela), peut-être qu'une déclaration if peut vous aider, mais n'oubliez pas : IFISEVIL

0 votes

Oui, les fichiers .block sont créés par moi-même. Je ne veux pas écrire chaque nom de dossier dans la configuration de NginX, c'est inutile. Je veux juste interdire l'accès à tous les fichiers contenus dans le dossier contenant le fichier .block. Humm, comme apache .htaccess refuser de tout.

2voto

Bert Points 974

Je crains que ce que vous essayez de réaliser ne soit pas présent par défaut dans NginX. Vous pourriez utiliser une instruction IF, mais vous savez.... IFISEVIL

Comme vous ajoutez ces fichiers manuellement, vous pouvez vous contenter de cela :

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

Ainsi, vous n'aurez pas besoin de créer un nouvel emplacement chaque fois que vous voudrez bloquer un dossier. Il suffit d'ajouter le dossier à la liste de celui-ci et vous êtes prêt à partir.

0 votes

Mauvais... Comme je le pensais, c'est impossible à faire à ma façon. Merci pour les réponses !

1voto

Sergey Serov Points 387

Lorsque les noms de répertoires sont inconnus ou changent en permanence - il est possible en utilisant la réponse de @Bert de générer une configuration séparée avec les noms collectés via bash-script et de l'exécuter par cron.

1. Le script pour trouver les répertoires et les collecter dans la configuration de 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. Incluez la configuration générée dans la configuration principale de nginx, par exemple dans la section "server" :

include nginx-block-directories.conf;

3. Rafraîchissez la configuration de nginx chaque nuit (crontab -e) :

30 3 * * * /path/script.sh

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X