Eu preciso restringir o acesso a quaisquer arquivos ou subdiretórios no diretório "testdir". Meu conf:
...
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
location /testdir {
deny all;
return 404;
}
...
Na minha configuração, não tenho restrições em / testdir / jpg_or_txt-files. Como fazer isso?
Respostas:
restringir o acesso a vários diretórios no nginx em uma entrada de local
fonte
É porque a diretiva "raiz" corresponde antes que a diretiva "negar" possa ser correspondida. Inverta a ordem das suas diretivas e deve funcionar:
fonte
Para garantir que a correspondência testdir seja escolhida em vez da correspondência jpg / txt, use os seguintes locais:
No seu exemplo, você tem dois tipos de locais.
location /testdir
é um local de prefixo, pois não possui til (~
) entrelocation
e/testdir
.location ~* ^.+\.(jpg|txt)$
é um local de regex (que não diferencia maiúsculas de minúsculas, devido ao*
diretamente após o til). Na documentação do nginx :O problema aqui é que seu local testdir está sendo lembrado, mas o local jpg / txt é selecionado durante o estágio regex, conforme corresponder. A seguinte nota da documentação é sobre a qual baseei minha solução (fornecida acima):
fonte
Isso lhe dará 403 o tempo todo por causa da negação de tudo ... Quando você deseja que o servidor lhe dê 404, basta retornar apenas 404 ... da seguinte forma:
fonte