2014-10-07 5 views
15

Ich bin jetzt eine django app mit nginx und gunicorn auf ubuntu 12.Fetching statische Dateien konnten mit 404 in nginx

Und ich konfigurieren, dass die nginx virtuellen Host-Datei wie unten bereitstellen:

server { 
    listen 80; 
    server_name mydomain.com; 
    access_log /var/log/nginx/gunicorn.log; 

    location/{ 
     proxy_pass http://127.0.0.1:8000; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

    location /static/ { 
     root /var/www/django/ecerp/erp/static/; 
    } 

} 

I kann den Django gut anfordern, aber wenn eine statische Datei angefordert wird, antwortet er mit 404-Status.

Ich bin sicher, dass der Stammpfad der statischen Datei korrekt ist.

Kann jemand helfen?

+1

http://wiki.nginx.org/Pitfalls#Root_inside_Location_Block. http://nginx.org/r/root –

+0

Ich würde auch sicherstellen, dass Ihr Nginx-Benutzer Berechtigungen zum Zugriff auf das Verzeichnis hat. Viel Glück – pztrick

+0

@pztrick nicht Berechtigungsproblem. Ich änderte es zu 777. Und jetzt zurück 404 aber nicht 403. –

Antwort

25

Sie sollten alias anstelle von root verwenden. root hängt die abschließenden URL-Teile an Ihren lokalen Pfad an (z. B. http://test.ndd/trailing/part, es fügt Ihrem lokalen Pfad einen/trailing/part hinzu). Stattdessen tut alias genau das, was Sie wollen: wenn http://test.ndd/static/ angefordert wird, wird/static Ihrem Alias ​​genau zugeordnet, ohne dass Sie erneut statisch anhängen.

+3

Ich habe ungefähr 3 Stunden damit verbracht, das herauszufinden, danke! – noahandthewhale

3

TL; DR - sollten Sie Ihre Dateien Berechtigungen prüfen

auf diese Frage gestolpert und ich war schon alias statt root, also, während die bestehende Antwort bis zu dem Punkt war, wie folgt sein könnte nützlich zu anderen.

In meinem Fall, die Lösung für die gleichen Symptome erwies sich als die Dateien in static/ mit root als Besitzer.

Eine einfache chown www-data:www-data . löste das Problem, und nicht mehr 404.

+0

Ich habe das auch mit chmod versucht. Welche Berechtigung benötigt nginx eigentlich für die Datei? Read-Only scheint nicht genug zu sein. Voller Zugriff scheint übertrieben. –

+0

@ ST-DDT Es ist keine gute Idee, auf root-Dateien von Nginx zuzugreifen, egal welche Berechtigungen sie haben. Die Verwendung von "Chown" ist hier eine viel bessere Wahl. – Jivan