Muszę ograniczyć dostęp do jakichkolwiek plików lub podkatalogów w katalogu testdir. Mój conf:
...
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
location /testdir {
deny all;
return 404;
}
...
W mojej konfiguracji nie mam żadnych ograniczeń dotyczących plików / testdir / jpg_or_txt. Jak to zrobić?
Odpowiedzi:
ograniczyć dostęp do wielu katalogów w nginx w jednym wpisie lokalizacji
źródło
Jest tak, ponieważ dyrektywa „root” jest zgodna, zanim można dopasować dyrektywę „deny”. Odwróć kolejność swoich dyrektyw i powinno działać:
źródło
Aby upewnić się, że zostanie wybrane dopasowanie testdir zamiast dopasowania jpg / txt, użyj następujących lokalizacji:
W twoim przykładzie masz dwa rodzaje lokalizacji.
location /testdir
jest lokalizacją prefiksu, ponieważ nie ma znaku tyldy (~
) pomiędzylocation
i/testdir
.location ~* ^.+\.(jpg|txt)$
jest lokalizacją wyrażenia regularnego (bez rozróżniania wielkości liter, ze względu na*
bezpośrednio za tyldą). Z dokumentacji nginx :Problem polega na tym, że twoja lokalizacja testdir jest zapamiętywana, ale następnie lokalizacja jpg / txt jest wybierana podczas etapu wyrażenia regularnego, gdy jest dopasowana. Poniższa uwaga z dokumentacji jest tym, na czym oparłem swoje rozwiązanie (podane powyżej):
źródło
To da ci 403 przez cały czas z powodu odmowy wszystkim ... Jeśli chcesz, aby serwer dał ci 404, po prostu zwróć 404 ... tak:
źródło