Расширение белого списка 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 ответ
Вы можете добиться этого, используя вложенное расположение, например:
местоположение / игровой сервер / { root /var/www/public; index index.html; location ~ \.pk3$ { } возврат 403; }
Пустой блок местоположения является преднамеренным и обязательным, поскольку nginx не поддерживает отрицательные совпадения с регулярным выражением. Если файл находится ниже / gameserver / и оканчивается на.pk3, то пустой блок местоположения совпадает, и запрос удовлетворяется. Вы можете добавить дополнительные директивы там, конечно. Если файл находится ниже / gameserver / и не заканчивается на.pk3, то внутренний блок местоположения не совпадает, и вместо этого выполняется возврат 403 (доступ запрещен).
Общее правило с nginx заключается в том, что вы хотите избегать "если" и, если вам нужна какая-либо форма соответствия пути, вы хотите полагаться на (вложенные) блоки местоположения.