Django + Apache2 + React не работает

Вопрос или проблема

Это состоит из Apache2, связанного с Django в качестве бэкенда (WSGI), и React в качестве фронтенда. Но он возвращает только ‘403 Forbidden’ с символом AH01630 в журнале ошибок. Также версия Apache2 2.4.58.

Часть конфигурации apache sites-available/default-ssl.conf:

WSGIDaemonProcess serve python-home=/venv/vee python-path=/venv/pub/proj/serve/serve
WSGIScriptAlias /api /venv/pub/proj/serve/serve/wsgi.py

<Directory /venv/pub/proj/serve/serve>
        <Files wsgi.py>
                Require all granted
        </Files>
</Directory>

<Directory /venv/pub/proj/serve/front/build>
        Options Indexes FollowSymLinks
        Require all granted
</Directory>

‘sites-available/react.conf`:

DocumentRoot /venv/pub/proj/serve/front/build

<Directory /venv/pub/proj/serve/front/build>
        Options Indexes FollowSymlinks
        AllowOverride None
        Require all granted
</Directory>

Проект Django находится в /venv/pub/proj/serve, а проект React в /venv/pub/proj/serve/front.

Ранее сервер был настроен на Apache2 и Django, а не на React, поэтому настройки WSGI Django не являются проблемой. Я хочу узнать, зачем, похоже, возникает конфликт конфигураций Apache2 между default-ssl.conf и react.conf. Если WSGI отключен, приложение React отображается.

Ответ или решение

Чтобы разобраться с проблемой, связанной с вашим проектом, воспользуемся структурированным методом анализа. В вашей ситуации вы сталкиваетесь с ошибкой ‘403 Forbidden’ и кодом ошибки Apache AH01630, что указывает на проблемы с разрешениями для доступа к ресурсам вашего сервера.

1. Проблема с разрешениями

Ошибка 403 Forbidden обычно связана с недостаточными правами доступа для каталога или файла. Проанализируем конфигурацию ваших виртуальных хостов Apache:

  • Убедитесь, что у пользователя, под которым работает Apache (обычно www-data или apache), есть права на чтение и выполнение всех файлов в каталогах /venv/pub/proj/serve, /venv/pub/proj/serve/serve, и /venv/pub/proj/serve/front/build.
  • Используйте следующую команду для изменения прав:
    sudo chown -R www-data:www-data /venv/pub/proj/
    sudo chmod -R 755 /venv/pub/proj/

2. Конфликт конфигурации между файлами .conf

При использовании Apache для управления как Django (через WSGI), так и React, необходимо корректно настроить виртуальные хосты, чтобы избежать конфликтов.

В вашем случае конфигурация в default-ssl.conf вероятно перекрывает настройки из react.conf, особенно если оба файла имеют одинаковую конфигурацию для базового URL (DocumentRoot).

Рекомендации:

  • Убедитесь, что оба конфигурационных файла используют разные локальные URL-пути. Например, если ваш React-приложение должно быть доступно по пути /, настройте react.conf с использованием Alias /.
  • Убедитесь, что оба виртуальных хоста (если они используют SSL, например) имеют уникальные ServerName и, при необходимости, ServerAlias.

3. Проверка настроек WSGI

Если вы обнаружите, что при отключении WSGI React-приложение доступно, следовательно, проблема может быть в конфигурации WSGI:

  • Убедитесь, что WSGIDaemonProcess настроен правильно, с учетом виртуального окружения и правильно указанного пути python-home.
  • Убедитесь, что у вас есть необходимые зависимости и библиотеки Python в активированном виртуальном окружении.

4. Логи ошибок Apache

Посмотрите дополнительно в логи ошибок Apache (обычно они хранятся в /var/log/apache2/error.log или /var/log/httpd/error_log). В этом файле могут содержаться дополнительные сообщения, которые помогут выявить причину проблемы.

Заключение

Корректная настройка разрешений, изучение конфликта в конфигурации виртуальных хостов и правильная настройка WSGI должны помочь вам решить проблему с ошибкой 403 Forbidden и обеспечить корректное взаимодействие между Apache, Django и React.

Если после всех проверок проблема все еще остается, возможно, вам стоит рассмотреть необходимость разделения приложения на разные поддомены или порты, чтобы избежать потенциальных конфликтов.

Оцените материал
Добавить комментарий

Капча загружается...