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”,并且如果您需要任何形式的路径匹配,您就需要依赖(嵌套的)位置块。