Nach vielen Stunden, nginx
in denen ich einzelne Dateien wie robots.txt
(Hinweis: Leeren Sie jedes Mal den Browser-Cache) bereitgestellt habe, habe ich zwei verschiedene Methoden gewählt, eine mit der Alias- Direktive und eine mit der Root- Direktive:
location /robots.txt { alias /home/www/static/robots.txt; }
location /robots.txt { root /home/www/static/; }
Gibt es einen funktionalen Unterschied zwischen den beiden? Oder Sicherheitsfragen? Konflikte mit anderen Richtlinien? (Beide schienen gut mit einem anderen / statischen Ort). Oder einen Grund, einen über den anderen zu wählen?
Hinweis - Ich habe nicht beide gleichzeitig verwendet :) Eher habe ich jeden nach dem anderen ausprobiert und beide haben funktioniert. Ich frage nicht, wie die beiden in derselben Datei zusammenarbeiten, sondern welche am besten zu verwenden wäre.
=
in beiden Fällen eine verwenden, oder? Oder gilt das nur fürroot
? Siehe auch meine Bearbeitung - ich wollte nicht beide gleichzeitig verwenden. :)=
in beiden Fällen verwenden.Ja, es gibt einen Unterschied: Mit "Alias" können Sie ... auch einen anderen Dateinamen als Alias angeben
wohingegen
zwingt Sie, Ihre Datei auf dem Server auch robots.txt zu benennen. Ich verwende die erste Option, da ich meine Robots-Dateien auf meinem Server als tld.domain.subdomain-robots.txt bezeichnen möchte. z.B
quelle
Ich denke, es lohnt sich ausdrücklich darauf hinzuweisen, dass nginx mit Präfixen und nicht mit Dateien an sich arbeitet. Im ersten Fall,
nginx ersetzt den String - Präfix
/robots.txt
im URL - Pfad mit/home/www/static/robots.txt
und verwendet dann das Ergebnis als Dateisystem - Pfad. Dargestellt als Pseudocode, würde dies ungefähr so aussehen:Wird
/robots.txt
also von aus bedient,/home/www/static/robots.txt
weil/robots.txt
das/robots.txt
Präfix der leere String ist und der leere String/home/www/static/robots.txt
angehängt wird, um ihn unverändert zu lassen. Aber/robots.txt1
würde von serviert/home/www/static/robots.txt1
und/robots.txt/foobar
würde von serviert werden/home/www/static/robots.txt/foobar
. Diese Dateien sind möglicherweise nicht vorhanden, was dazu führt, dass nginx eine 404-Antwort sendet, und es ist wahrscheinlich, dassrobots.txt
es sich ohnehin nicht um ein Verzeichnis handelt, aber nginx weiß das nicht im Voraus, und dies alles basiert auf Zeichenfolgepräfixen und nicht auf einer scheinbaren Datei oder Verzeichnis durch das Fehlen oder Vorhandensein eines abschließenden Schrägstrichs.Im zweiten Fall
nginx fügt die Zeichenfolge
/home/www/static/
am Anfang des URL-Pfads ein und verwendet das Ergebnis als Dateisystempfad. Im Pseudocode wäre dies so etwas wie:Dies hat genau das gleiche Ergebnis wie der erste Fall, jedoch aus einem anderen Grund. Es gibt kein Entfernen von Präfixen, aber da jeder URI-Pfad das Präfix enthalten muss
/robots.txt
, beginnen die Dateisystempfade immer mit dem,/home/www/static//robots.txt
was dem entspricht/home/www/static/robots.txt
.Natürlich kann der Pseudocode nicht die ganze Geschichte erzählen, da nginx zB keine unformatierten URL-Pfade verwendet
/../../../etc/passwd
, dietry_files
Direktive das Verhalten vonroot
/ ändertalias
und es Einschränkungen gibt, woalias
verwendet werden kann.quelle
Es gibt einen Unterschied, wenn sich der Alias auf ein ganzes Verzeichnis bezieht.
wird funktionieren, während
geht nicht Das müsste sein
(Leicht zu verwechseln)
quelle