Работает только первый загружаемый сайт Django
Недавно я отправил проблему на stackoverflow под названием Django infinite loading after multiple requests on apache using mod_wsgi. Так или иначе, я недавно изменил много кода и теперь у меня новая проблема. Первый сайт Django, который я запрашиваю, работает, однако второй указывает на первый, который я загрузил, и выдает ответ DisallowedHost, потому что, очевидно, он пытается получить доступ к приложению Django с другим доменным именем. Я, очевидно, хочу, чтобы оно делало то, что должно делать, так что если кто-нибудь может мне помочь, это было бы здорово. Вот весь мой код
Vhosts LoadFile "C:/Users/taber/AppData/Local/Programs/Python/Python310/python310.dll" LoadModule wsgi_module "C:/Users/taber/AppData/Local/Programs/Python/Python310/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win_amd64.pyd" WSGIPythonHome "C:/Users/taber/AppData/Local/Programs/Python/Python310" ################################################################################################## # ASTINARTS.UK.TO ВИРТУАЛЬНЫЙ ХОСТ # ################################################################################################## <VirtualHost *:443> ServerName astinarts.uk.to SSLEngine on SSLCertificateFile "conf/astinarts/astinarts.uk.to-chain.pem" SSLCertificateKeyFile "conf/astinarts/astinarts.uk.to-key.pem" WSGIApplicationGroup %{GLOBAL}
Alias /static "C:/xampp/htdocs/astinarts/static"
<Directory "C:/xampp/htdocs/astinarts/static">
Require all granted
</Directory>
Alias /media "C:/xampp/htdocs/astinarts/media"
<Directory "C:/xampp/htdocs/astinarts/media">
Require all granted
</Directory>
Alias /.well-known "C:/xampp/htdocs/astinarts/.well-known"
<Directory "C:\xampp\htdocs\astinarts\.well-known">
Require all granted
</Directory>
Alias /sitemap.xml "C:/xampp/htdocs/astinarts/sitemap.xml"
Alias /robots.txt "C:/xampp/htdocs/astinarts/robots.txt"
<Directory "C:/xampp/htdocs/astinarts/astinarts">
Require all granted
</Directory>
WSGIScriptAlias / "C:/xampp/htdocs/astinarts/astinarts/wsgi.py"
<Directory "C:/xampp/htdocs/astinarts/astinarts">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
##################################################################################################
# NEOSTORM.US.TO VIRTUAL HOST #
##################################################################################################
<VirtualHost *:443>
ServerName neostorm.us.to
SSLEngine on
SSLCertificateFile "conf/ssl.crt/neostorm.us.to-chain.pem"
SSLCertificateKeyFile "conf/ssl.key/neostorm.us.to-key.pem"
WSGIApplicationGroup %{GLOBAL}
Alias /static "C:/xampp/htdocs/neostorm/static"
<Directory "C:/xampp/htdocs/neostorm/static">
Require all granted
</Directory>
Alias /media "C:/xampp/htdocs/neostorm/media"
<Directory "C:/xampp/htdocs/neostorm/media">
Require all granted
</Directory>
Alias /sitemap.xml "C:/xampp/htdocs/neostorm/sitemap.xml"
Alias /robots.txt "C:/xampp/htdocs/neostorm/robots.txt"
WSGIScriptAlias / "C:/xampp/htdocs/neostorm/neostorm/wsgi_windows.py"
<Directory "C:/xampp/htdocs/neostorm/neostorm">
<Files wsgi_windows.py>
Require all granted
</Files>
</Directory>
ErrorLog "C:\xampp\apache\logs\neostorm_error.log"
CustomLog "C:\xampp\apache\logs\neostorm_custom.log" common
</VirtualHost>
##################################################################################################
# MAIL.NEOSTORM.US.TO VIRTUAL HOST #
##################################################################################################
<VirtualHost *:443>
ServerName mail.neostorm.us.to
SSLEngine on
SSLCertificateFile "conf/ssl.crt/neostorm.us.to-chain.pem"
SSLCertificateKeyFile "conf/ssl.key/neostorm.us.to-key.pem"
DocumentRoot "C:/xampp/htdocs/webmail"
<Directory "C:/xampp/htdocs/webmail">
Require all granted
</Directory>
</VirtualHost>
Сайт 1 WSGI файл
import os
import sys
from django.core.wsgi import get_wsgi_application
from pathlib import Path
# Add project directory to the sys.path
path_home = str(Path(__file__).parents[1])
if path_home not in sys.path:
sys.path.append(path_home)
os.environ['DJANGO_SETTINGS_MODULE'] = 'astinarts.settings'
application = get_wsgi_application()
Сайт 2 WSGI файл
import os
import sys
from django.core.wsgi import get_wsgi_application
from pathlib import Path
# Add project directory to the sys.path
path_home = str(Path(__file__).parents[1])
if path_home not in sys.path:
sys.path.append(path_home)
os.environ['DJANGO_SETTINGS_MODULE'] = 'neostorm.settings'
application = get_wsgi_application()
Примечание: я не знаю, является ли поведение ниже для всех версий mod_wsgi одинаковым и была ли исправлена ошибка. Я наблюдал это в 2020/2021 годах в Windows. Версии я не помню. В среде Ubuntu это никогда не проявлялось.
Если вы используете virt hosts в Windows Apache с mod_wsgi и определяете App..Group %{GLOBAL} всегда WSGIApplication в первом(!!!) virt. host будет называться как угодно ServerName и т.д.. Это должно быть ошибкой в mod_wsgi или Apache.
<VirtualHost *:443>
ServerName my_server_one.com
....
WSGIApplicationGroup %{GLOBAL}
....
</VirtualHost>
<VirtualHost *:443>
ServerName my_server_two.com
....
WSGIApplicationGroup %{GLOBAL}
....
</VirtualHost>
Решение: использовать отдельные явные имена групп:
<VirtualHost *:443>
ServerName my_server_one.com
....
WSGIApplicationGroup my_app_one
....
</VirtualHost>
<VirtualHost *:443>
ServerName my_server_two.com
....
WSGIApplicationGroup my_app_two
....
</VirtualHost>
Проблема не в наличии нескольких сайтов, не в использовании mod wsgi и даже не в использовании Windows. На самом деле проблема в базе данных. По какой-то причине (не знаю почему) база данных по умолчанию становится поврежденной.
Решением было переключение на MySQL с базы данных по умолчанию. Я не совсем уверен, почему база данных по умолчанию становится поврежденной.
Вот что можно сделать, если вы хотите перейти на MySQL.
Внутри вашего settings.py найдите DATABASES и сделайте его таким.
DATABASES = {
'default': {
'ENGINE' : 'django.db.backends.mysql', # <-- UPDATED line
'NAME' : 'DATABASE_NAME', # <-- UPDATED line
'USER' : 'USER', # <-- UPDATED line
'PASSWORD': 'PASSWORD', # <-- UPDATED line
'HOST' : 'localhost', # <-- UPDATED line
'PORT' : '3306',
}
}
Для получения дополнительной информации смотрите здесь: Сайт Django не загружается после запроса