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/public;
    索引index.html;
    位置 ~ \.pk3$ {
    }
    返回403;
}

空位置區塊是有意為之且必需的,因為 nginx 不支援負正規表示式匹配。如果檔案位於 /gameserver/ 下方並以 .pk3 結尾,則空位置區塊符合並且請求被授予。當然,您可以在那裡添加其他指令。如果檔案位於 /gameserver/ 下方並且確實不是以 .pk3 結尾,則內部位置區塊不匹配,而是執行返回 403(禁止存取)。

nginx 的一般規則是您要避免“if”,並且如果您需要任何形式的路徑匹配,您需要依賴(嵌套)位置區塊。

相關內容