Проблема с развертыванием 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_wsgiNo .htaccess content at all.Project Structure: У меня есть два экземпляра Django (production и staging) для CI/CD,
каждый из них имеет свои собственные настройки, переменные среды, базу данных и домен.
validator/settings/base.pyvalidator/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 помещаются в эти включенные каталоги.
- Пользовательская конфигурация 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
- Пользовательская конфигурация 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
- Рабочий файл 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()
- 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"],
}
}
<время работы/>
Шаги по устранению неполадок, которые Я уже предпринял:
Проверил журналы ошибок Apache: В основном журнале Apache (/var/log/httpd/error_log) постоянно отображается ошибка "Запрос превысил лимит в 10 внутренних перенаправлений". Пользовательские журналы моего приложения Django (/home//app/error.log и _test/error.log) пусты или не содержат соответствующих ошибок, что часто указывает на проблему еще до того, как регистратор Django сможет включиться.
Разрешения: Я тщательно проверил и установил права доступа chown -R medivali:webapps и chmod (755 для каталогов, 644 для файлов, 664 для журналов) в /home//app/, /home//app_test/, /etc/validator/envs/ и /etc/validator/wsgi/.
WSGIDaemonProcess User/Group: Я пробовал использовать user=nobody group=webapps (как в конфигурации) и user=medivali group=medivali. Ни то, ни другое не решает проблему.
Подтверждение версии Python: Подтверждено, что venv/bin/python -версия 3.12+ для обеих сред.
конфликт proxy_fcgi_module: я добавил <FilesMatch ".(phtml|php[0-9]*)$">SetHandler None в мои файлы validator_conf.conf, чтобы попытаться предотвратить вмешательство обработчика cPanel PHP-FPM.
DocumentRoot против WSGIScriptAlias: Я понимаю, что WSGIScriptAlias / должен переопределять DocumentRoot для Django, но я также пробовал создать index.html в /home/medivali/public_html (DocumentRoot по умолчанию на главном VHost), чтобы протестировать базовое обслуживание Apache, но это все равно приводит к циклу перенаправления или внутренней ошибке сервера.
Учетные данные базы данных: Я трижды проверил DBUSER, DBPASSWORD, DBNAME, DBHOST, DBPORT в обоих env-файлах. Я могу подключаться к базам данных непосредственно с сервера, используя клиент mysql.
ALLOWED_HOSTS: Подтвержденные правильные доменные имена указаны в ALLOWED_HOSTS как для рабочих, так и для промежуточных настроек.
Консультации по искусственному интеллекту: Провел 2,5 дня, консультируясь с ChatGPT, Gemini, Claude и DeepSeek, пробуя различные предложения, но безуспешно.
Это была проблема со сборкой на Python. Я понял это — некоторые модули расширения C (например, для pickle) были собраны неправильно, что вызвало внутреннюю ошибку сервера. После корректного восстановления среды проблема была устранена. Спасибо!