Ich muss den Zugriff auf alle Dateien oder Unterverzeichnisse im Verzeichnis "testdir" einschränken. Meine 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?
Antworten:
Um den Zugriff auf mehrere Verzeichnisse in nginx an einem Ortseintrag einzuschränken, gehen Sie wie folgt vor
quelle
Dies liegt daran, dass die Direktive "root" übereinstimmt, bevor die Direktive "deny" abgeglichen werden kann. Kehren Sie die Reihenfolge Ihrer Anweisungen um und es sollte funktionieren:
quelle
Verwenden Sie die folgenden Speicherorte, um sicherzustellen, dass die testdir-Übereinstimmung anstelle der jpg / txt-Übereinstimmung ausgewählt ist:
In Ihrem Beispiel gibt es zwei Arten von Standorten.
location /testdir
ist ein Präfix, da es keine tilde (~
) zwischenlocation
und gibt/testdir
.location ~* ^.+\.(jpg|txt)$
ist ein Regex-Ort (ein Ort, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, da*
direkt nach der Tilde). Aus der Nginx-Dokumentation :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 ist das, worauf ich meine (oben angegebene) Lösung gestützt habe:
quelle
Dies gibt Ihnen die ganze Zeit eine 403, da alle verweigert werden ... Wenn Sie möchten, dass der Server Ihnen eine 404 gibt, geben Sie einfach nur eine 404 zurück ... wie folgt:
quelle