Gunicorn на сервере Apache не обслуживает статические файлы в проекте Django: Ошибка «Not Found» для /static/

Я запускаю проект Django, используя Gunicorn и Apache с mod_wsgi, но Gunicorn не обслуживает статические файлы правильно. Когда я пытаюсь загрузить свою страницу, я получаю ошибки типа:

Не найдено: /static/css/style.css Не найдено: /static/js/app.js

В консоли браузера я получаю

Refused to apply style from 'http://localhost/static/css/style.css' because its MIME type 
('text/html') is not a supported stylesheet MIME type, and strict MIME checking is 
enabled.

Кроме того, когда я пытаюсь получить прямой доступ к статическим файлам (например, http://localhost:9090/static/css/style.css), я получаю ошибку 404. Статические файлы правильно настроены в настройках Django, но Gunicorn не может их обнаружить.

Окружение: Django версия: 5.1 Версия Gunicorn: 20.x.x Apache версия: 2.4.x mod_wsgi версия: 4.9.0 Операционная система: Ubuntu 20.04 Версия Python: 3.10 Запуск в виртуальной среде

Статическая конфигурация Django (settings.py):

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

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'userentry', //my django app
]

Текущая настройка: Apache проксирует запросы к Gunicorn. Статические файлы собираются в директории STATIC_ROOT с помощью python manage.py collectstatic. Я подтвердил, что статические файлы находятся по адресу /app/static/ на сервере.

Мой виртуальный хост apache:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName localhost

ProxyPass / http://127.0.0.1:9090/
ProxyPassReverse / http://127.0.0.1:9090/

# Point WSGI to the proper directories
WSGIDaemonProcess malwarepurge python-home=/app/venv python-path=/app/malwarepurge
WSGIProcessGroup malwarepurge
WSGIScriptAlias /app /app/malwarepurge/wsgi.py

Alias /static/ /app/static/

# Allow access to the necessary app files (including other directories in /app)
<Directory /app>
    AllowOverride All
    Require all granted
</Directory>

# Specifically grant access to the malwarepurge folder for WSGI
<Directory /app/malwarepurge>
    AllowOverride All
    Require all granted
</Directory>

<Directory /app/static>
Require all granted
</Directory>

<Directory /app/userentry/>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Выполненные шаги: Я добавил STATIC_URL, STATICFILES_DIRS и STATIC_ROOT в настройки Django. Я запустил python manage.py collectstatic, чтобы собрать статические файлы в указанной директории. Я настроил Apache на использование mod_wsgi для обслуживания приложения Django. Gunicorn работает, но не может обслуживать статические файлы напрямую. Apache должен обслуживать статические файлы, но Gunicorn по-прежнему сообщает об ошибке «Not Found» при попытке доступа к ним.

Что я пробовал: Дважды перепроверил настройки STATIC_URL, STATIC_ROOT и STATICFILES_DIRS. Убедился, что статические файлы правильно расположены в /app/static/. Попробуйте перезапустить Apache и Gunicorn после внесения изменений в конфигурацию. Убедитесь, что пути к статическим файлам верны и что Gunicorn работает на правильном IP/порту. Проверьте, что mod_wsgi правильно установлен и включен.

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