2016-10-21 4 views
0

Ich kann nicht herausfinden, warum Nginx einige statische Dateien nach der Bereitstellung auf einem Digital Ocean nicht finden kann. Ich denke, dass ich alles richtig eingestellt habe. Die Collectstatic funktionierte einwandfrei, sie erzeugte /project/static Verzeichnis mit allen statischen Dateien.Nginx kann einige statische Dateien nicht finden

Vielleicht ist es etwas falsch mit settings.py:

STATIC_URL = '/static/' 
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) 
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') 
STATICFILES_DIRS = (
    # os.path.join(PROJECT_ROOT, 'static'), 
    ('dolava_app', os.path.join(PROJECT_ROOT, 'dolava_app', 'static')), 
    ('reservations_app', os.path.join(PROJECT_ROOT, 'reservations_app', 'static')), 
    ('admin_stuff', os.path.join(PROJECT_ROOT, 'admin_stuff', 'static')), 
    ('ajax_stuff', os.path.join(PROJECT_ROOT, 'ajax_stuff', 'static')), 
) 

nginx/sites-available/django

upstream app_server { 
    server 127.0.0.1:9000 fail_timeout=0; 
} 

server { 
    listen 80 default_server; 
    listen [::]:80 default_server ipv6only=on; 

    root /usr/share/nginx/html; 
    index index.html index.htm; 

    client_max_body_size 4G; 
    server_name _; 

    keepalive_timeout 5; 

    # Your Django project's media files - amend as required 
    location /media { 
     alias /home/django/project/media; 
    } 

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

    # Proxy the static assests for the Django Admin panel 
    location /static/admin { 
     alias /usr/lib/python2.7/dist-packages/django/contrib/admin/static/admin/; 
    } 

    location/{ 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_pass http://app_server; 
    } 
} 

I nginx und gunicorn auch neu gestartet haben. Aber immer noch einige statische Dateien können nicht innerhalb django/project/static/ Dir gefunden werden. Weißt du, was soll ich tun?

+0

Entschuldigung für die albernen Vorschläge hier ... Vielleicht den nachgestellten Schrägstrich zu "/ Medien" und "statische" für beide Ort und Alias-Pfad hinzufügen. Es sollte jedoch keinen Unterschied machen. Sie könnten auch den Vorrang von Ortsblöcken erzwingen, indem Sie 'location^~/static/{' verwenden. Schließlich möchten Sie vielleicht eine Kopfzeile in Medien und statisch und dann 'curl -I http: // yourwebsiteurl' hinzufügen und prüfen, ob sie geliefert wird von diesen Blöcken oder an den Proxy übergeben werden. Ich schlage diese Dinge nur vor, weil Sie nicht gesagt haben, um was für einen Fehler es sich handelt, obwohl ich 404 annahm. –

Antwort

1

Sie sollten alias dort nicht verwenden. In nginx funktioniert es absolut anders als Apache.

http://nginx.org/en/docs/http/ngx_http_core_module.html#alias

Sie sollten root nur stattdessen verwenden.

upstream app_server { 
    server 127.0.0.1:9000 fail_timeout=0; 
} 

server { 
    listen 80 default_server; 
    listen [::]:80 default_server ipv6only=on; 

    root /usr/share/nginx/html; 
    index index.html index.htm; 

    client_max_body_size 4G; 
    server_name _; 

    keepalive_timeout 5; 

    # Your Django project's media files - amend as required 
    location /media { 
     root /home/django/project; 
    } 

    # your Django project's static files - amend as required 
    location /static { 
     root /home/django/project; 
    } 

    # Proxy the static assests for the Django Admin panel 
    location /static/admin { 
     root /usr/lib/python2.7/dist-packages/django/contrib/admin; 
    } 

    location/{ 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_pass http://app_server; 
    } 
} 
Verwandte Themen