
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;
}
}
}
Ich bin neu bei Nginx und probiere es jetzt schon seit ein paar Stunden (google und Handbuch lesen), aber ich kann nicht herausfinden, wie ich bei Nginx alle Dateierweiterungen außer .pk3 ablehnen kann.
/var/www/gameserver/ verweist auf einen symbiotischen Link, von dem ich nur die .pk3-Dateien herunterladen möchte.
Dies soll ein kleiner Spieleserver für ein bisschen Spaß mit Freunden werden, ohne dass Geld im Spiel ist.
Vielen Dank für Ihre Zeit,
Vitali
Antwort1
Sie können dies erreichen, indem Sie einen verschachtelten Speicherort wie diesen verwenden:
Standort /gameserver/ { Wurzel /var/www/öffentlich; Index Index.html; Standort ~ \.pk3$ { } Rückgabe 403; }
Der leere Standortblock ist beabsichtigt und erforderlich, da nginx keine negativen Regex-Übereinstimmungen unterstützt. Wenn sich eine Datei unter /gameserver/ befindet und mit .pk3 endet, stimmt der leere Standortblock überein und die Anfrage wird genehmigt. Sie können dort natürlich weitere Anweisungen hinzufügen. Wenn sich eine Datei unter /gameserver/ befindet undnichtmit .pk3 endet, dann stimmt der innere Standortblock nicht überein und stattdessen wird die Rückgabe 403 (Zugriff verboten) ausgeführt.
Die allgemeine Regel bei nginx lautet, dass Sie „if“ vermeiden sollten und dass Sie sich auf (verschachtelte) Standortblöcke verlassen sollten, wenn Sie irgendeine Form der Pfadübereinstimmung benötigen.