Ich habe eine Frage. Ist es möglich, den Zugriff auf alle Dateien in einem Ordner zu blockieren, wenn der Ordner beispielsweise eine bestimmte Datei enthält? .block
Ich weiß, dass ich mich auf Folgendes verlassen kann:
location ~ \.(mp3|log|txt|rtf|doc|docx)$ {
deny all;
return 404;
}
Wenn es möglich ist, wie geht das?
Ich habe es versucht mit:
location ~ \.block {
deny all;
return 404;
}
Diese Funktion beschränkt jedoch nur die Blockdatei, nicht die Dateien im Ordner (die weiterhin heruntergeladen oder einfach im Browser geöffnet werden können).
Grüße.
Antwort1
Ich fürchte, das, was Sie erreichen möchten, ist standardmäßig nicht in NginX vorhanden. Sie könnten eine IF-Anweisung verwenden, aber Sie wissen ja ... IFISEVIL
Da Sie diese Dateien manuell hinzufügen, können Sie einfach Folgendes tun:
location ~ /(folder1|folder2|folder3|...) {
deny all;
}
Auf diese Weise müssen Sie nicht jedes Mal einen neuen Speicherort erstellen, wenn Sie einen Ordner blockieren möchten. Fügen Sie den Ordner einfach der Liste hier hinzu, und schon kann es losgehen.
Antwort2
Wenn Verzeichnisnamen unbekannt sind oder sich ständig ändern, ist es mithilfe der Antwort von @Bert möglich, per Bash-Skript eine separate Konfiguration mit den gesammelten Namen zu generieren und diese per Cron auszuführen.
1. Das Skript zum Suchen und Sammeln von Verzeichnissen in der Nginx-Konfiguration.
#! /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. Fügen Sie die generierte Konfiguration in die Hauptkonfiguration von nginx ein, beispielsweise im Abschnitt „Server“:
include nginx-block-directories.conf;
3. Aktualisieren Sie die Nginx-Konfiguration jede Nacht (crontab -e):
30 3 * * * /path/script.sh