extensão de arquivo whitelist Nginx

2
 server {
    listen  80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6

server_name public;
root /var/www/public;

location = /gameserver/
{
root /var/www/public/gameserver;
index index.html;
    if ($request_filename !~* [pk3]$)
    {
        rewrite ^ /404.html;
    }
}

}

Sou novo no Nginx e tenho tentado por algumas horas agora (google e ler o manual), mas não consigo descobrir como negar todas as extensões de arquivo, exceto o .pk3 com nginx.

o / var / www / gameserver / aponta para um link simbiótico de onde eu só quero o download do .pk3.

Este será um pequeno servidor de jogos para diversão com amigos, sem dinheiro envolvido.

Obrigado pelo seu tempo,

Vitali

    
por vitali 13.06.2015 / 00:10

1 resposta

2

Você pode conseguir isso usando um local aninhado como este:

location /gameserver/ {
    root /var/www/public;
    index index.html;
    location ~ \.pk3$ {
    }
    return 403;
}

O bloco de localização vazio é intencional e obrigatório porque o nginx não suporta correspondências de expressão regular negativas. Se um arquivo estiver localizado abaixo de / gameserver / e terminar em .pk3, o bloco de localização vazio será igualado e a solicitação será concedida. Você pode adicionar diretivas adicionais lá, é claro. Se um arquivo está localizado abaixo de / gameserver / e não termina em .pk3, o bloco de localização interna não coincide e, em vez disso, o retorno 403 (acesso proibido) é executado.

A regra geral com nginx é que você deseja evitar "if" e, se precisar de qualquer forma de correspondência de caminho, deseja confiar nos blocos de localização (aninhados).

    
por 13.06.2015 / 01:43