NGINX и Django не работают в режиме отладки, обслуживая некоторые статические файлы и некоторые нет

У меня наблюдается странное поведение после отключения DEBUG на Django, расположенном за NGINX reverse proxy.

Я тестирую его на Armbian Linux с Python 3.7.3.

В проекте Django есть файл manage.py в папке

конфигурация папки такова

- /var/webserver/backend
  - manage.py
  - backend
    - settings.py
  - static
    - img (contains collected plus my logo and favicon)
    - admin (the collected admin files)

Конфигурация NGINX выглядит следующим образом (статическая часть, остальное - обратный прокси с самоподписанным сертификатом):

location /static {
      autoindex on;
      autoindex_exact_size off;
      alias /var/webserver/backend/static;
    }

Статическая часть settings.py выглядит следующим образом, приложение staticfiles находится в APPS:

STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'static'

Я запускаю команду manage.py, в то время как в каталоге /var/webserver/backend nginx запущен как служба.

Кажется, я перепробовал все комбинации "слэшей" как внутри конфигурации NGINX, так и в settings.py (до, после, оба, ни одного)

Эта конфигурация является ближайшей к работе, ситуация следующая:

  • Логотип.png и favicon.ico в папке static/img отображаются правильно
  • Все css, js или другие не загружены (страница полностью лишена стилей)
  • В логах нет 404 (либо Django, либо NGINX access.log показывает 200).
  • Если я перехожу по путям, которые я вижу в инспекторе страниц (например, <link rel="stylesheet" type="text/css" href="/static/admin/css/base.css"> в разделе head), я могу увидеть файл (например, перейдя по адресу https://address/static/admin/css/base.css)
  • .
  • Я попробовал изменить права доступа и владельца файлов, перейдя на права 777 и root:www-data в качестве владельца
  • .
  • Я попробовал установить WhiteNoise, но безуспешно.

Я отключил кэш в браузере, чтобы избежать неперезагруженных страниц.

Я действительно не могу понять, что не работает.

Я пытался изменить конфигурацию любым способом, я пытался установить WhiteNoise и поместить его в Apps без успеха. Я попробовал заменить "alias" на "root" в конфигурации NGINX, и все стало еще хуже (также упали изображения)

Спасибо всем, кто поможет, дайте мне знать, если нужно что-то еще.

Может быть несколько причин, почему это происходит.

  1. Директива псевдонимовnginx должна заканчиваться слэшем (/) [ссылка (https://nginx.org/en/docs/http/ngx_http_core_module.html#alias) После static также следует добавить косую черту.
 location /static/ {
    ...
    alias /var/webserver/backend/static/;
  }
  1. Убедитесь, что вы включили типы mime в файл nginx conf.

  2. Некоторые люди сообщают, что бэкенд хранилища Whitenoise whitenoise.storage.CompressedManifestStaticFilesStorage в некоторых случаях работает не очень хорошо. Попробуйте изменить его на whitenoise.storage.CompressedStaticFilesStorage.

Причины, по которым он не работает.

  1. обязательно добавьте MEDIA_ROOT в urls.py

    urlpatterns = [path('', include('app_one.urls')),] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

    if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

  2. добавьте {% load 'static' %} с <link rel="stylesheet" href="{% static 'fonts/icomoon/style.css' %}">
    в html-файл

  3. Запустите python manage.py collectstatic. Затем он соберет все статические файлы в папку staticfiles проекта ИЛИ корневую папку static_files, в зависимости от того, где вы хотите их разместить.

Вернуться на верх