
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 estou tentando há algumas horas (google e lendo o manual), mas não consigo descobrir como negar todas as extensões de arquivo, exceto .pk3 com nginx.
o /var/www/gameserver/ aponta para um link simbiótico de onde eu só quero que o .pk3 possa ser baixado.
Este será um pequeno servidor de jogos para diversão com os amigos, sem dinheiro envolvido.
Obrigado pelo seu tempo,
Vitali
Responder1
Você pode conseguir isso usando um local aninhado como este:
localização /servidordejogos/ { raiz /var/www/public; índice index.html; localização ~ \.pk3$ { } retornar 403; }
O bloco de localização vazio é intencional e obrigatório porque o nginx não oferece suporte a correspondências de regex negativas. Se um arquivo estiver localizado abaixo de /gameserver/ e terminar em .pk3, o bloco de localização vazio corresponderá e a solicitação será atendida. Você pode adicionar diretivas adicionais, é claro. Se um arquivo estiver localizado abaixo de /gameserver/ e nãonãotermina em .pk3 então o bloco de localização interno não corresponde e em vez disso o retorno 403 (acesso proibido) é executado.
A regra geral com o nginx é que você deseja evitar "se" e se precisar de qualquer forma de correspondência de caminho, você deseja confiar em blocos de localização (aninhados).