
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 を初めて使用しており、数時間試してみましたが (Google で検索したり、マニュアルを読んだり)、nginx で .pk3 以外のすべてのファイル拡張子を拒否する方法がわかりません。
/var/www/gameserver/ は、.pk3 のみをダウンロードできるようにしたい共生リンクを指します。
これは、お金を使わずに友達と楽しむための小さなゲームサーバーになります。
御時間ありがとうございます、
ヴィタリ
答え1
次のようにネストされた場所を使用してこれを実現できます。
場所 /ゲームサーバー/ { ルート /var/www/public; インデックス index.html; 場所 ~ \.pk3$ { } 403 を返します。 }
空のロケーションブロックは意図的であり、nginxが正規表現の否定一致をサポートしていないため必要です。ファイルが/gameserver/の下にあり、.pk3で終わる場合、空のロケーションブロックが一致し、リクエストが許可されます。もちろん、そこに追加のディレクティブを追加できます。ファイルが/gameserver/の下にあり、ない.pk3 で終わる場合、内部の場所ブロックが一致せず、代わりに return 403 (アクセス禁止) が実行されます。
nginx の一般的なルールは、「if」を避け、何らかの形式のパス一致が必要な場合は (ネストされた) ロケーション ブロックに依存することです。