Necesito restringir el acceso a cualquier archivo o subdirectorio en el directorio "testdir". Mi conf:
...
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
location /testdir {
deny all;
return 404;
}
...
En mi configuración no tengo restricciones en / testdir / jpg_or_txt-files. ¿Cómo hacerlo?
Respuestas:
para restringir el acceso a múltiples directorios en nginx en una entrada de ubicación hacer
fuente
Esto se debe a que la directiva "raíz" coincide antes de que la directiva "denegar" pueda coincidir. Invierta el orden de sus directivas y debería funcionar:
fuente
Para asegurarse de que se elige la coincidencia testdir en lugar de la coincidencia jpg / txt, use las siguientes ubicaciones:
En su ejemplo, tiene dos tipos de ubicaciones.
location /testdir
es una ubicación de prefijo, ya que no tiene tilde (~
) entrelocation
y/testdir
.location ~* ^.+\.(jpg|txt)$
es una ubicación de expresiones regulares (no distingue entre mayúsculas y minúsculas, debido a que está*
directamente detrás de la tilde). De la documentación de nginx :El problema aquí es que su ubicación testdir se está recordando, pero luego la ubicación jpg / txt se selecciona durante la etapa de expresión regular, ya que coincide. La siguiente nota de la documentación es en lo que basé mi solución (dada anteriormente):
fuente
Esto le dará un 403 todo el tiempo debido a la denegación de todo ... Cuando desee que el servidor le dé un 404 solo devuelva un 404 ... así:
fuente