
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”,並且如果您需要任何形式的路徑匹配,您需要依賴(嵌套)位置區塊。