Статические файлы Django 404 с использованием nginx

#python-3.x #django #ubuntu #nginx #gunicorn

#python-3.x #django #ubuntu #nginx #gunicorn

Вопрос:

Я знаю, что об этом спрашивали несколько раз, но ни одно из этих решений, похоже, не работает для меня. Это было мое первое развертывание проекта Django, поэтому для справки я следовал этому руководству: https://linuxhint.com/create_django_app_ubuntu /

По этой причине вполне возможно, что что-то пролетело над моей головой полностью.

конфигурация nginx (я пробовал псевдоним вместо root, с косой чертой и без нее, убедился, что статический файл не принадлежит root и т. Д.):

 upstream django {
    server 127.0.0.1:8000;
}

server {
    listen 80;

    location /static/ {
        root /home/bryan/Projects/portfolio;
        try_files $uri =404;
    }

    location / {
        try_files $uri @send_to_django;
    }

    location @send_to_django {
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://django;
    }
}
  

settings.py:

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

Примечание:

  • django.contrib.staticfiles установлен
  • python manage.py collectstatic похоже, работает
  • Я действительно считаю, что правильно ссылаюсь на статические файлы в своих шаблонах:
 {% load static %}
    <link rel="stylesheet" type="text/css" href="{% static 'home/css/index.css' %}">
  

Моя файловая структура:

  • портфолио (корень проекта django)
    • главная страница (приложение django)
    • статический (статические файлы проекта)
      • home (статические файлы для домашнего приложения)
        • css

Кроме статических файлов, сайт работает безупречно с этой настройкой.

Ответ №1:

  1. Убедитесь, что ваши статические файлы находятся в /home/bryan/Projects/portfolio/static
     STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
  

Приведенные выше настройки могут привести к тому, что статические файлы будут собираться в /home/bryan/Projects/portfolio/static/ статический каталог

  1. Проверьте разрешения статического каталога

  2. Используйте «псевдоним» вместо «root» в вашем nginx conf

Комментарии:

1. Спасибо за ответ. 1. Похоже, что это не так. Все файлы существуют, как и предполагалось /home/bryan/Projects/portfolio/static . Например, даже тот, на который я ссылаюсь в своем фрагменте HTML, можно найти в файловой системе в разделе home/bryan/Projects/portfolio/static/home/css/index.css 2. Я только что проверил, и разрешения для статического каталога передаются моему пользователю, а не root. 3. Я пытаюсь это сейчас: location /static/ { alias /home/bryan/Projects/portfolio/static/; try_files $uri =404; } Но это все равно просто дает мне 404

2. @Bryan location /static/ { псевдоним /home/bryan/Projects/portfolio/static/; удалить завершающие косые черты

3. Теперь я их удалил, и, к сожалению, он по-прежнему выдает 404

4. @Bryan что говорит журнал nginx?

5. О, похоже, он выдает 403 для статических файлов. Но почему это происходит только со статическими файлами? Сам фактический шаблон HTML сообщает о 200 и работает просто отлично; все в каталоге /portfolio/ имеет одинаковые разрешения.