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 的新手,我已经尝试了几个小时(谷歌和阅读手册)但我无法弄清楚如何使用 nginx 拒绝除 .pk3 之外的所有文件扩展名。

/var/www/gameserver/ 指向一个共生链接,我只想从那里下载 .pk3。

这将是一个小型游戏服务器,供您与朋友一起享受乐趣,无需花钱。

谢谢你的时间,

维塔利

答案1

您可以使用如下嵌套位置来实现此目的:

位置/游戏服务器/ {
    根目录/var/www/公共;
    索引 索引.html;
    位置 ~ \.pk3$ {
    }
    返回 403;
}

空位置块是故意的,也是必需的,因为 nginx 不支持负正则表达式匹配。如果文件位于 /gameserver/ 下并以 .pk3 结尾,则空位置块匹配,请求被批准。当然,您可以在那里添加其他指令。如果文件位于 /gameserver/ 下并以 .pk3 结尾,则空位置块匹配,请求被批准。当然,您可以在那里添加其他指令。如果文件位于 /gameserver/ 下并以 .pk3 结尾,则空位置块匹配,请求被批准。不是以 .pk3 结尾,则内部位置块不匹配,而是执行返回 403(禁止访问)。

nginx 的一般规则是,您要避免使用“if”,并且如果您需要任何形式的路径匹配,您就需要依赖(嵌套的)位置块。

相关内容