Мне нужно ограничить доступ к любым файлам или подкаталогам в директории "testdir". Мой конф:
...
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
location /testdir {
deny all;
return 404;
}
...
В моей конфигурации у меня нет ограничений на / testdir / jpg_or_txt-files. Как это сделать?
Ответы:
ограничить доступ к нескольким каталогам в nginx в одной записи
источник
Это потому, что директива root совпадает до того, как директива deny может быть найдена. Обратный порядок ваших директив, и это должно работать:
источник
Чтобы убедиться, что вместо соответствия jpg / txt выбрано соответствие testdir, используйте следующие местоположения:
В вашем примере у вас есть два типа местоположений.
location /testdir
является префиксным местоположением, так как не имеет тильды (~
) междуlocation
и/testdir
.location ~* ^.+\.(jpg|txt)$
является местоположением регулярного выражения (регистронезависимое, из-за*
непосредственно после тильды). Из документации nginx :Проблема здесь в том, что ваше местоположение testdir запоминается, но затем местоположение jpg / txt выбирается на этапе регулярного выражения, как оно совпадает. Следующее примечание из документации - это то, на чем я основывал свое решение (приведенное выше):
источник
Это даст вам 403 все время из-за запрета на все ... Когда вы хотите, чтобы сервер давал вам 404, просто возвращайте только 404 ... вот так:
источник