Cómo bloquear el acceso a carpetas cuando existe un archivo específico - NGINX

Cómo bloquear el acceso a carpetas cuando existe un archivo específico - NGINX

Tengo una pregunta. ¿Es posible bloquear el acceso a todos los archivos de la carpeta si la carpeta contiene un archivo específico .block, por ejemplo? Sé que puedo contar con:

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

Si es posible, ¿cómo hacer esto?

Lo intenté con:

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

Pero esta función restringe solo el archivo .block, no los archivos dentro de la carpeta (aún está disponible para descargar o abrir en el navegador)

Saludos.

Respuesta1

Me temo que lo que intentas lograr no está presente en NginX de forma predeterminada. Podrías usar una declaración IF, pero ya sabes... IFISEVIL

Dado que agrega estos archivos manualmente, puede seguir con esto:

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

De esta manera, no necesitarás crear una nueva ubicación cada vez que quieras bloquear una carpeta. Simplemente agregue la carpeta a la lista de esta y estará listo para comenzar.

Respuesta2

Cuando los nombres de los directorios son desconocidos o cambian permanentemente, es posible usar la respuesta @Bert para generar una configuración separada con los nombres recopilados a través de bash-script y ejecutarla mediante cron.

1. El script para buscar directorios y recopilarlos en la configuración 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. Incluya la configuración generada en la configuración principal de nginx, por ejemplo en la sección "servidor":

include nginx-block-directories.conf;

3. Actualice la configuración de nginx todas las noches (crontab -e):

30 3 * * * /path/script.sh

información relacionada