it-swarm.com.de

So beschränken Sie den Zugriff auf Verzeichnisse und Unterverzeichnisse

Ich muss den Zugriff auf Dateien oder Unterverzeichnisse im Verzeichnis "testdir" beschränken. Mein conf:

...
location ~* ^.+\.(jpg|txt)$ {
            root   /var/www/site;
        }
location /testdir {
        deny all;
        return 404;
        }
...

In meiner Konfiguration habe ich keine Einschränkungen für/testdir/jpg_or_txt-Dateien. Wie es geht?

42
tst

um den Zugriff auf mehrere Verzeichnisse in Nginx an einem Speicherort einzuschränken, tun Sie dies

...
location ~ /(dir1|dir2|dir3) {
   deny all;
   return 404;
}
...
43
DavidR.

Dies liegt daran, dass die Direktive "root" übereinstimmt, bevor die Direktive "verweigern" übereinstimmen kann. Kehren Sie die Reihenfolge Ihrer Anweisungen um und es sollte funktionieren:

...
location /testdir {
  deny all;
  return 404;
}
location ~* ^.+\.(jpg|txt)$ {
  root   /var/www/site;
}
...
22

Verwenden Sie die folgenden Speicherorte, um sicherzustellen, dass die Testverzeichnisübereinstimmung anstelle der JPG/TXT-Übereinstimmung ausgewählt wird:

location ^~ /testdir {
  deny all;
  return 404;
}
location ~* ^.+\.(jpg|txt)$ {
  root   /var/www/site;
}

In Ihrem Beispiel gibt es zwei Arten von Standorten. location /testdir Ist eine Präfixposition, da zwischen location und ~ Keine Tilde (/testdir) Enthält.

location ~* ^.+\.(jpg|txt)$ ist eine Regex-Position (eine, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird, da * direkt hinter der Tilde steht). Aus der Nginx-Dokumentation :

Um einen Standort zu finden, der einer bestimmten Anforderung entspricht, überprüft nginx zunächst Standorte, die mithilfe der Präfixzeichenfolgen (Präfixpositionen) definiert wurden. Unter diesen wird der Ort mit dem längsten übereinstimmenden Präfix ausgewählt und gespeichert. Anschließend werden reguläre Ausdrücke in der Reihenfolge ihres Auftretens in der Konfigurationsdatei überprüft. Die Suche nach regulären Ausdrücken endet mit der ersten Übereinstimmung und die entsprechende Konfiguration wird verwendet. Wenn keine Übereinstimmung mit einem regulären Ausdruck gefunden wird, wird die Konfiguration des zuvor gespeicherten Präfixorts verwendet.

Das Problem hierbei ist, dass Ihr Testdir-Speicherort gespeichert wird, der JPG/TXT-Speicherort jedoch während der Regex-Phase entsprechend ausgewählt wird. Der folgende Hinweis aus der Dokumentation basiert auf meiner Lösung (siehe oben):

Wenn die am längsten übereinstimmende Präfixposition den Modifikator "^ ~" hat, werden reguläre Ausdrücke nicht überprüft.

location /foo {
    deny all;
    return 404;
}

Dies gibt Ihnen die ganze Zeit eine 403, weil Sie alle verweigern ... Wenn Sie möchten, dass der Server Ihnen eine 404 gibt, geben Sie einfach nur eine 404 zurück ... wie folgt:

location /foo {
    return 404;
}
12
RemyNL