Extensión de archivo de lista blanca de Nginx

Extensión de archivo de lista blanca de Nginx
 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;
    }
}

}

Soy nuevo en Nginx y lo he estado intentando durante algunas horas (buscando en Google y leyendo el manual) pero no puedo encontrar la manera de denegar todas las extensiones de archivo excepto .pk3 con nginx.

/var/www/gameserver/ apunta a un enlace simbiótico desde donde solo quiero descargar el .pk3.

Este será un pequeño servidor de juegos para divertirse con amigos, sin dinero involucrado.

Gracias por tu tiempo,

vitali

Respuesta1

Puedes lograr esto usando una ubicación anidada como esta:

ubicación /servidor de juegos/ {
    raíz /var/www/public;
    índice index.html;
    ubicación ~ \.pk3$ {
    }
    devolver 403;
}

El bloque de ubicación vacío es intencional y obligatorio porque nginx no admite coincidencias de expresiones regulares negativas. Si un archivo se encuentra debajo de /gameserver/ y termina en .pk3, entonces el bloque de ubicación vacío coincide y se concede la solicitud. Por supuesto, puede agregar directivas adicionales allí. Si un archivo se encuentra debajo de /gameserver/ y nonotermina en .pk3, entonces el bloque de ubicación interno no coincide y en su lugar se ejecuta el retorno 403 (acceso prohibido).

La regla general con nginx es que desea evitar "si" y si necesita algún tipo de coincidencia de ruta, desea confiar en bloques de ubicación (anidados).

información relacionada