Ich muss meine App über meinen App-Server unter 8080
und meine statischen Dateien aus einem Verzeichnis bereitstellen, ohne den App-Server zu berühren. Die Nginx-Konfiguration, die ich habe, ist ungefähr so ...
# app server on port 8080
# nginx listens on port 8123
server {
listen 8123;
access_log off;
location /static/ {
# root /var/www/app/static/;
alias /var/www/app/static/;
autoindex off;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Mit dieser Konfiguration funktioniert jetzt alles einwandfrei. Beachten Sie, dass die root
Richtlinie auskommentiert ist.
Wenn ich das aktiviere root
und deaktiviere, alias
funktioniert es nicht mehr. Wenn ich jedoch das Trailing /static/
von dem entferne, root
funktioniert es wieder.
Kann jemand erklären, was los ist. Bitte erläutern Sie auch klar und ausführlich, was die Unterschiede zwischen root
und alias
und deren Zweck sind.
log_format scripts '$document_root | $uri | > $request';
inhttp
Abschnitt undaccess_log /var/log/nginx/scripts.log scripts;
inserver
Abschnitt der Nginx-Konfiguration setzen ..nginx: [emerg] invalid number of arguments in "alias" directive
, und der Server ist während seines Neustarts ausgefallen.wie sagen als @treecoder
Ein Bild sagt mehr als tausend Worte
für
root
:für
alias
:quelle
In Ihrem Fall können Sie die
root
Direktive verwenden, da ein$uri
Teil derlocation
Direktive mit dem letztenroot
Direktiventeil identisch ist .und
root
Direktive wird$uri
an den Pfad angehängt .quelle
Nur eine kurze Ergänzung zu der sehr hilfreichen Antwort von @ good_computer. Ich wollte das Stammverzeichnis der URL durch einen Ordner ersetzen, aber nur, wenn es mit einem Unterordner übereinstimmt, der statische Dateien enthält (die ich als Teil des Pfads beibehalten wollte).
Wenn sich beispielsweise die angeforderte Datei in
/app/js
oder befindet/app/css
, suchen Sie in/app/location/public/[that folder]
.Ich habe das mit einem Regex zum Laufen gebracht.
quelle
alias
wird verwendet, um den Location Part Path (LPP) im Anforderungspfad zu ersetzen, während derroot
dem Anforderungspfad vorangestellt wird.Es gibt zwei Möglichkeiten, den Anforderungspfad dem endgültigen Dateipfad zuzuordnen.
alias
kann nur im Standortblock verwendet werden und überschreibt die Außenseiteroot
.alias
undroot
kann nicht zusammen im Standortblock verwendet werden.quelle
Server blockieren, um die statische Seite auf Nginx zu leben.
quelle
Mit anderen Worten, wenn Sie sich kurz fassen: Im Falle von
root
ist das angegebene Standortargument Teil des Pfads und der URI des Dateisystems . Auf der anderen Seite - füralias
Direktiven ist das Argument der Standortanweisung nur Teil des URIEs handelt sich also
alias
um einen anderen Namen, der einen bestimmten URI einem bestimmten Pfad im Dateisystemroot
zuordnet , während das Standortargument an den Stammpfad angehängt wird, der als Argument für dieroot
Direktive angegeben wird.quelle