Расширение файла белого списка Nginx

Расширение файла белого списка 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;
    }
}

}

Я новичок в Nginx и уже несколько часов пытаюсь (гуглю и читаю руководство), но не могу понять, как запретить все расширения файлов, кроме .pk3, с помощью nginx.

/var/www/gameserver/ указывает на симбиотическую ссылку, откуда мне нужно загружать только файлы .pk3.

Это будет небольшой игровой сервер для развлечения с друзьями, без каких-либо денежных вложений.

Спасибо за ваше время,

Виталий

решение1

Этого можно добиться, используя вложенное расположение, например:

местоположение /игровой сервер/ {
    корень /var/www/public;
    индекс index.html;
    местоположение ~ \.pk3$ {
    }
    возврат 403;
}

Пустой блок location намеренный и необходим, поскольку nginx не поддерживает отрицательные соответствия регулярных выражений. Если файл расположен ниже /gameserver/ и заканчивается на .pk3, то пустой блок location соответствует, и запрос удовлетворяется. Конечно, вы можете добавить туда дополнительные директивы. Если файл расположен ниже /gameserver/ и ненетзаканчиваются на .pk3, то внутренний блок расположения не совпадает и вместо этого выполняется возврат 403 (доступ запрещен).

Общее правило при работе с nginx заключается в том, что следует избегать «if», а если вам нужна какая-либо форма сопоставления путей, следует полагаться на (вложенные) блоки местоположений.

Связанный контент