Migrei uma aplicação CodeIgniter 3 de um servidor Apache para Nginx. Para usuários logados, deverá ser possível baixar alguns arquivos PDF. Preciso bloquear o acesso diretamente a essas pastas. Por exemplo: exemplo.com.br/files/xyz.pdf. Se eu acessar o navegador sem fazer login, consigo acessar esses arquivos. Se eu colocar:
location /(versoes|lgpd)/ {
deny all;
return 403;
}
Não funciona. O acesso permanece disponível.
Pergunta: Preciso bloquear o acesso externo, porém permitir que usuários logados possam fazer download.
Se por "/(versoes|lgpd)/" você quer dizer regex capturando "versoes" ou "lgpd" - então seu URL é
example.com.br/versoes/
ou
example.com.br/lgpd/
Então você deve adicionar "~" como um indicador de que o que segue deve ser tratado como regex (a menos que sua URL seja
example.com.br/(versoes|lgpd)/
, literalmente).Além disso - é uma boa prática adicionar "^" para indicar o início do URL (novamente - assumindo que você quer dizer regex). Então - minha configuração ficaria assim:
Deixe-me observar também que você pode (e provavelmente deveria) pensar sobre permissões de arquivo.
Exemplo: se o seu nginx estiver sendo executado
nginx:nginx
alterando o proprietárioversoes
elgpd
os diretórios para, digamos:root
, também impedirá o acesso externo (porque o nginx não pode lê-los por padrão).