Je dois limiter l'accès à tous les fichiers ou sous-répertoires du répertoire "testdir". Ma conf:
...
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
location /testdir {
deny all;
return 404;
}
...
Dans ma configuration, je n'ai aucune restriction sur / testdir / jpg_or_txt-files. Comment faire?
Réponses:
restreindre l’accès à plusieurs répertoires de nginx dans un seul emplacement
la source
C'est parce que la directive "root" correspond avant que la directive "deny" puisse être mise en correspondance. Inversez l'ordre de vos directives et cela devrait fonctionner:
la source
Pour vous assurer que la correspondance testdir est choisie à la place de la correspondance jpg / txt, utilisez les emplacements suivants:
Dans votre exemple, vous avez deux types d’emplacement.
location /testdir
est un préfixe, car il n'a pas de tilde (~
) entrelocation
et/testdir
.location ~* ^.+\.(jpg|txt)$
est un emplacement regex (insensible à la casse, en raison de la position*
directement après le tilde). Dans la documentation nginx :Le problème ici est que votre emplacement testdir est mémorisé, mais l'emplacement jpg / txt est sélectionné pendant l'étape de la regex, car il correspond. La note suivante de la documentation est la base de ma solution (donnée ci-dessus):
la source
Cela vous donnera tout le temps un 403 à cause du refus de tout ... Quand vous voulez que le serveur vous donne un 404, il vous suffit de renvoyer un 404 ... comme ceci:
la source