Nginx - Permitir acesso ao diretório de pastas apenas por referência de URL

1

desenvolvedor web front-end aqui. Desculpe antecipadamente.

Minha empresa deseja armazenar novas versões de nosso software em nosso servidor da Web, executando o Nginx, fornecido pelo Mecanismo do WP .

O caminho do arquivo para essas construções seria company.com/downloads/file.zip . Queremos restringir o acesso a arquivos nessa pasta, a menos que eles venham de um URL de referência específico que fica atrás de um portal de login para nossos clientes.

  • Se o usuário clicar no link para qualquer arquivo dentro de /downloads/ do referenciador permitido, o usuário obtém o arquivo
  • Se o usuário clicar em link de qualquer outra origem, retorne 404 ou redirecione para a página inicial
  • Se o referenciador vazio ou tentativa de acesso direto, retornar 404 ou redirecionar para a página inicial

Eu encontrei um recurso sobre como evitar hotlinking de imagens (estaremos lidando com arquivos .zip), o que pode funcionar para mim, mas eu preciso de ajuda com a sintaxe dessa linguagem. Há provavelmente um monte de errado com isso.

location ~ /downloads/$ {
valid_referers none blocked ~.allowed_domain.com;
if ($invalid_referer) {
return 404;
}
}

O WP Engine não me permite adicionar o código Nginx, então eu vou ter que enviar o código que eu quero que ele implemente. Se alguém souber como fazer isso e puder me ajudar, eu realmente aprecio isso!

    
por Jesse Rogers 22.02.2017 / 19:10

2 respostas

1

Outra possibilidade é usar o cabeçalho X-Accel . Não conheço seu caso de uso, por isso talvez não seja um bom ajuste.

X-Accel é o cabeçalho específico do nginx. Você pode emitir esse cabeçalho em seu script PHP - como header("X-Accel-Redirect: /private-downloads/magic.iso") Quando o nginx reconhecer esse cabeçalho, o conteúdo do arquivo magic.iso do servidor será localizado em /data/private-downloads .

Portanto, sua tarefa é preparar download.php , que verifica a autorização e responde com o cabeçalho X-Accel ou redireciona para a tela de login.

Definição de /private-downloads/ em nginx.conf

location /private-downloads/ {
    internal;    # this
    alias /data/private-downloads;
    # this should be located outside of HTTP server root
}

Para mais detalhes, consulte x-accel questions no serverfault. 1

    
por 22.02.2017 / 22:14
0

Você pode usar a diretiva valid_referers nginx. ( nginx doc )

location /downloads/ {
    alias /var/www/downloads;
    valid_referers  www.example.me ;

if ($invalid_referer) {
        return 404;
    }
}

Eu pessoalmente nunca tentei isso em produção, porque eu prefiro usar X-Accel cabeçalho . Você pode verificar seu usuário no script PHP e depois enviar o cabeçalho nginx X-accel. O cabeçalho pedirá ao nginx para o servidor os arquivos estáticos por nginx.

    
por 22.02.2017 / 21:25