Назад | Перейти на главную страницу

Обслуживание статических файлов Django через Nginx 404

Я размещаю свой Djangoproject на Nginx с uwsgi. статические файлы должны обслуживаться Nginx отдельно

server { 
    listen 80; 
    server_name blog.foo.de; 

    location /static { 
        root /home/user/blog/staticfiles; 
        access_log   off; 
        expires      30d; 
    } 

    location / {
       include uwsgi_params;
       uwsgi_pass unix:/tmp/blog.socket;
    }

    access_log      /var/log/nginx/blog.access.log combined;
    error_log       /var/log/nginx/blog.error.log warn;
}

Мой STATIC_URL установлен на http://blog.foo.de/static/ Папка / home / user / blog / staticfiles содержит статическую папку, в которой собираются файлы. так что согласно другим сообщениям здесь все шолуд работает - но это не так. часть uwsgi работает нормально, но я получаю только 404 когда я пытаюсь получить доступ к статическим файлам.

Используйте этот код для местоположения статических файлов

location ^~ /static/ {
    alias  /home/user/blog/staticfiles;
}

Эта ссылка может помочь вам для получения более подробной информации - https://stackoverflow.com/questions/23226357/django-nginx-static-files-404

Это требует некоторой общей очистки:

  • Ваш server блок имеет два location / блоки, что запрещено; один из них будет проигнорирован. Используйте только один location блок для любого данного местоположения.
  • Ваш server блок не имеет root определено. Удостоверься что root определяется только в server блок, а не в location блоки (если для местоположения не нужен другой корень).

Также рекомендую не поворачивать off то access_log или используя expires во время отладки, поскольку это может затруднить выявление причины проблемы.


Хотя, чтобы действительно это исправить, подумайте о том, чтобы полностью его переписать. Очень короткий пример:

server {
    location @django {
        include uwsgi_params; 
        uwsgi_pass unix:/tmp/blog.socket; 
    }

    location / {
        try_files $uri $uri/ @django;
    }
}