Проблема с развертыванием Django/Apache/mod_wsgi: внутренняя ошибка сервера и цикл перенаправления в cPanel (AlmaLinux 9)

I'm an intern пытаюсь развернуть приложение Django на сервере cPanel и сталкиваюсь с постоянной "Внутренней ошибкой сервера" в сочетании с циклом перенаправления Apache. Я уже более двух дней устраняю неполадки с помощью различных помощников по ИИ, но не могу точно определить причину. Есть какие-нибудь новые идеи??

<время работы/>

Мои настройки:

  • Server OS : Альмалинукс 9.6 (Шалфей Маргей)
  • Hosting Environment: cPanel (В моей учетной записи cPanel отсутствует опция "Настроить приложение Python", поэтому я использую ручную настройку Apache/mod_wsgi.)
  • Django Deployment: Apache + mod_wsgi
  • No .htaccess content at all.
  • Project Structure: У меня есть два экземпляра Django (production и staging) для CI/CD,

каждый из них имеет свои собственные настройки, переменные среды, базу данных и домен.

  • validator/settings/base.py

  • validator/settings/production.py ( наследуется от базы)

  • validator/settings/staging.py ( наследуется от базы)

  • Файлы среды хранятся в /etc/validator/envs

  • Файлы WSGI хранятся в /etc/validator/wsgi/

  • Django project roots: /home/<username>/<app_name>/ ( prod) и /home/<username>/<app_name_test>/ (промежуточный этап).

  • Python Version: Мои виртуальные среды запущены Python 3.12.9, и мои файлы WSGI подтверждают это.

<время работы/>

В чем проблема:

Когда я пытаюсь получить доступ либо к domain.in (рабочий), либо к test.domain.in (промежуточный), , я получаю сообщение "Внутренняя ошибка сервера". Мой журнал ошибок Apache (в частности, /var/log/httpd/error_log) показывает следующее сообщение о критической ошибке:

[Fri May 30 00:26:38.624027 2025] [core:error] [pid 253617:tid 253705] [client 45.115.89.80:26970] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

Это началось после истечения срока действия/обновления сервера, а затем, когда я настроил новые базы данных для промежуточной и рабочей версий, обновив соответствующие env-файлы. Ранее это работало (общий доступ к базе данных).

<время работы/>

Моя конфигурация Apache:

Я понимаю, что cPanel использует "Стиль прямого включения" для конфигураций Apache, где httpd.conf включает файлы из каталогов, подобных /etc/apache2/conf.d/userdata/.... Мои пользовательские конфигурации Django помещаются в эти включенные каталоги.

  1. Пользовательская конфигурация Apache для производственного домена (/etc/apache2/conf.d/userdata/std/2_4/<username>/<domain.in>/<filename>.conf):
ServerName <domain>.in
ServerAlias www.<domain>.in
ServerAlias <server_ip>

WSGIDaemonProcess django_app python-home=/home/<username>/app/venv python-path=/home/<username>/app user=<apache_user> group=<group_user>
WSGIProcessGroup app

WSGIScriptAlias / /etc/validator/wsgi/production.wsgi 

Alias /static/ /home/<username>/app/staticfiles/

<Directory /home/<username>/app/staticfiles>
        Require all granted
</Directory>

<Directory /etc/validator/wsgi>
        <Files production.wsgi>
            Require all granted
        </Files>
</Directory>

ErrorLog /home/<username>/app/error.log
CustomLog /home/<username>/app/access.log combined
  1. Пользовательская конфигурация Apache промежуточного домена (аналогичный путь для test.domain.in):
ServerName test.<domain>.in
ServerAlias www.test.<domain>.in

WSGIDaemonProcess test_app python-home=/home/<username>/app_test/venv python-path=/home/<username>/app_test user=<apache_user> group=<group_user>
WSGIProcessGroup app_test

WSGIScriptAlias / /etc/validator/wsgi/staging.wsgi 

Alias /static/ /home/<username>/app_test/staticfiles/

<Directory /home/<username>/app_test/staticfiles>
        Require all granted
</Directory>

<Directory /etc/validator/wsgi>
        <Files production.wsgi>
            Require all granted
        </Files>
</Directory>

ErrorLog /home/<username>/app_test/error.log
CustomLog /home/<username>/app_test/access.log combined

3.Файл рабочей среды (/etc/validator/envs/production.env):

DBUSER=<dbuser>
DBPASSWORD=<dbpasswd>
DBNAME=<dbname>
DBHOST=localhost
DBPORT=3306
  1. Рабочий файл WSGI (/etc/validator/wsgi/production.wsgi):
import os
import sys
from pathlib import Path
from dotenv import load_dotenv

ENV_FILE = Path('/etc/validator/envs/production.env')
load_dotenv(dotenv_path=ENV_FILE)

os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<django_root_app>.settings.production')

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
  1. Django settings/prod.py (аналогичная структура для settings/staging.py):
import os
from .base import *

DEBUG = False

ALLOWED_HOSTS = [
    "domain",
    "www.domain",
    "server_ip",
]

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.<sql>",
        "USER": os.environ["DBUSER"],
        "PASSWORD": os.environ["DBPASSWORD"],
        "NAME": os.environ["DBNAME"],
        "HOST": os.environ["DBHOST"],
        "PORT": os.environ["DBPORT"],
    }
}
<время работы/>

Шаги по устранению неполадок, которые Я уже предпринял:

  1. Проверил журналы ошибок Apache: В основном журнале Apache (/var/log/httpd/error_log) постоянно отображается ошибка "Запрос превысил лимит в 10 внутренних перенаправлений". Пользовательские журналы моего приложения Django (/home//app/error.log и _test/error.log) пусты или не содержат соответствующих ошибок, что часто указывает на проблему еще до того, как регистратор Django сможет включиться.

  2. Разрешения: Я тщательно проверил и установил права доступа chown -R medivali:webapps и chmod (755 для каталогов, 644 для файлов, 664 для журналов) в /home//app/, /home//app_test/, /etc/validator/envs/ и /etc/validator/wsgi/.

  3. WSGIDaemonProcess User/Group: Я пробовал использовать user=nobody group=webapps (как в конфигурации) и user=medivali group=medivali. Ни то, ни другое не решает проблему.

  4. Подтверждение версии Python: Подтверждено, что venv/bin/python -версия 3.12+ для обеих сред.

  5. конфликт proxy_fcgi_module: я добавил <FilesMatch ".(phtml|php[0-9]*)$">SetHandler None в мои файлы validator_conf.conf, чтобы попытаться предотвратить вмешательство обработчика cPanel PHP-FPM.

  6. DocumentRoot против WSGIScriptAlias: Я понимаю, что WSGIScriptAlias / должен переопределять DocumentRoot для Django, но я также пробовал создать index.html в /home/medivali/public_html (DocumentRoot по умолчанию на главном VHost), чтобы протестировать базовое обслуживание Apache, но это все равно приводит к циклу перенаправления или внутренней ошибке сервера.

  7. Учетные данные базы данных: Я трижды проверил DBUSER, DBPASSWORD, DBNAME, DBHOST, DBPORT в обоих env-файлах. Я могу подключаться к базам данных непосредственно с сервера, используя клиент mysql.

  8. ALLOWED_HOSTS: Подтвержденные правильные доменные имена указаны в ALLOWED_HOSTS как для рабочих, так и для промежуточных настроек.

  9. Консультации по искусственному интеллекту: Провел 2,5 дня, консультируясь с ChatGPT, Gemini, Claude и DeepSeek, пробуя различные предложения, но безуспешно.

Это была проблема со сборкой на Python. Я понял это — некоторые модули расширения C (например, для pickle) были собраны неправильно, что вызвало внутреннюю ошибку сервера. После корректного восстановления среды проблема была устранена. Спасибо!

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