2014-04-22 13 views
13

Hier sind meine Einstellungen:django nginx statische Dateien 404

STATIC_URL = '/static/' 

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"), 
) 

STATIC_ROOT = '/home/django-projects/tshirtnation/staticfiles' 

Hier ist meine nginx-Konfiguration:

server { 
    server_name 77.241.197.95; 

    access_log off; 

    location /static/ { 
     alias /home/django-projects/tshirtnation/staticfiles/; 
    } 

    location/{ 
     proxy_pass http://127.0.0.1:8001; 
     proxy_set_header X-Forwarded-Host $server_name; 
     proxy_set_header X-Real-IP $remote_addr; 
     add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; 
    } 
} 

ich python manage.py collectstatic laufen habe und es hat alle statischen Dateien kopiert. Ich starte meinen Server mit gunicorn_django --bind: my-ip: 8001 und alles scheint zu funktionieren, außer für statische Dateien.

EDIT: Ich habe

laufen
sudo tail /var/log/nginx/error.log 

und es scheint keine Fehler der statischen Dateien nicht gefunden werden:/

+0

Ändern Sie zuerst Ihren 'gunicorn_django' Befehl in' gunicorn_django --bind = 127.0.0.1: 8001', denn wenn Sie ihn mit Ihrer externen IP ausführen, akzeptiert er Verbindungen von [extern] (http: // 77.241.197.95:8001). –

+0

@OmidRaha Jetzt funktioniert es überhaupt nicht:/ – Marijus

+1

Haben Sie debug = False in Ihrer Datei setting.py gesetzt? –

Antwort

0

Ich denke Browser in Ihrer statischen zu finden versucht:

http://127.0.0.1:8001/static/ 

Während nginx standardmäßig auf 80 Port arbeiten.

Sie müssen 8001 Port in Nginx Config definieren oder Django Server auf 80 Port ausführen.

0

Sehen Sie sich diese Dinge

1 Ob die statische ältere von nginx zugänglich ist, meine ich den Ordner Erlaubnis.

2 oder tun dies

diese ersetzen:

STATIC_ROOT = '/home/django-projects/tshirtnation/staticfiles' 

mit diesem

STATIC_ROOT = ''

und fügen Sie diese in den Einstellungen

STATICFILES_DIRS = (
    '/home/django-projects/tshirtnation/staticfiles/', 
) 

Don‘ t vergessen Sie den Nginx-Server neu zu laden.

Ich hoffe, das funktioniert.

+0

hat nicht funktioniert: // – Marijus

1

Ihr Problem ist, dass der location / Block immer verwendet wird, auch nach dem location /static/ man, so wird alles proxy_pass Ed.
Die Lösung hier ist es, etwas Magie zu verwenden try_files.

server { 
    server_name 77.241.197.95; 

    access_log off; 

    location/{ 
     try_files $uri @django; 
    } 

    location /static/ { 
     alias /home/django-projects/tshirtnation/staticfiles/; 
     try_files $uri =404; 
     # here we use =404 because there is no need to pass it to gunicorn. 
    } 

    location @djago { 
     proxy_pass http://127.0.0.1:8001; 
     proxy_set_header X-Forwarded-Host $server_name; 
     proxy_set_header X-Real-IP $remote_addr; 
     add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; 
    } 
} 
+2

Nginx stimmt mit dem spezifischsten Standort überein, daher ist dies nicht erforderlich. –

0

-Mine sieht wie folgt aus, und es funktionierte:

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), '..', 'static'), 
) 

Und in der nginx Konfiguration, meine Lage/static/über dem Standort/wie diese,

location /static { 
    // 
} 

# Finally, send all non-media requests to the Django server. 
location/{ 
    // 
} 

Und Noch eine Sache, ich weiß nicht, ob das wichtig ist, aber ich höre auf dem Server {} zu. Ich bin mir nicht sicher, ob es helfen kann.

1

In Ihren Einstellungen.py, setzen diese:

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder', 
'django.contrib.staticfiles.finders.AppDirectoriesFinder' 
) 
STATIC_ROOT = "/home/django-projects/tshirtnation/staticfiles/" 
STATIC_URL = '/static/' 

Sie brauchen das nicht:

STATICFILES_DIRS = ... 
-2

Verwenden STATIC_URL mit Domain. Es ist wichtig!

3

Versuchen Sie, den ^~ Präfix Modifikator Ihre statische Position Hinzufügen von regulären Ausdrücken überspringen Überprüfung:

location ^~ /static/ { 
    alias /home/django-projects/tshirtnation/staticfiles/; 
} 
16

ich das gleiche Problem gestoßen und konnte meine nginx Konfiguration beheben, indem die hinteren / vom /static/ Standort zu entfernen.

location /static { # "/static" NOT "/static/" 
    # ... 
} 
+1

danke, es hat für mich funktioniert: D – pyprism

0

versuchen, dies in settings.py:

import os 
ROOT_PATH = os.path.dirname(__file__) 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(ROOT_PATH,'static/') 
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),] 

und Konfigurationsdatei in nginx (oder Servereinstellung):

location /static { 
    alias /home/djangohome/static; # your Django project's static files - amend as required 
} 
-1

Try slash in nginx Einstellungen gefolgt von statischen zu entfernen z.B Es sollte "/ static" nicht "/ static /" sein, und wenn Ihre Einstellungen in Ordnung waren, dann versuchen Sie, den Server auf dem lokalen Computer neu zu laden und versuchen, auf Remote-Computer neu zu starten. Ich sah ähnlich, aber nach dem Neustart der Maschine, behob das Problem.