660 Stimmen

Nginx - Verwirrung bei der Bereitstellung statischer Dateien mit Root und Alias

Ich muss meine Anwendung über meinen Anwendungsserver unter 8080 und meine statischen Dateien aus einem Verzeichnis, ohne den App-Server zu berühren.

    # 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;
            }
    }

Jetzt, mit dieser Konfiguration, funktioniert alles einwandfrei. Beachten Sie, dass die root ist auskommentiert.

Wenn ich aktiviere root und deaktivieren Sie die alias funktioniert es nicht mehr. Wenn ich jedoch das nachgestellte /static/ de root beginnt es wieder zu funktionieren.

Kann mir jemand erklären, was hier los ist?

4voto

Tapish Punkte 51
server {
    server_name xyz.com;
    root /home/ubuntu/project_folder/;

    client_max_body_size 10M;
    access_log  /var/log/nginx/project.access.log;
    error_log  /var/log/nginx/project.error.log;

    location /static {
        index index.html;
    }

    location /media {
        alias /home/ubuntu/project/media/;
    }
}

Server-Block, um die statische Seite auf nginx zu leben.

4voto

Akash Patra Punkte 51

Meine Antwort ist zwar nicht erforderlich, aber ich denke, es ist notwendig, dies hinzuzufügen, root y alias funktioniert anders, wenn es um Regex geht.

 location ~ /static/my.png$ {
     alias /var/www/static/;
     access_log off;
     expires max;
 }

In diesem Fall wird die Regex-Übereinstimmung nicht mit Alias hinzugefügt, nginx sucht nur /var/www/static/ no /var/www/static/my.png . Sie müssen die Regex-Erfassung verwenden.

 location ~ /static/my.png$ {
     root /var/www;
     access_log off;
     expires max;
 }

In diesem Fall wird die übereinstimmende Url mit Root hinzufügen, nginx wird suchen /var/www/static/my.png .

3voto

Mit anderen Worten, um es kurz zu machen: im Falle von root ist das angegebene Ortsargument Teil von Pfad und URI des Dateisystems . Auf der anderen Seite - für alias Direktivenargument der Location-Anweisung ist Teil von Nur URI

Also, alias ist ein anderer Name, der einen bestimmten URI einem bestimmten Pfad im Dateisystem zuordnet, während root hängt das Argument location an den Root-Pfad an, der als Argument für root Richtlinie.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X