
В предыдущем вопросе я спрашивал, как заставить mod_wsgi использовать определенную версию Python. Следуя ответу на этот вопрос, я создал виртуальную среду Python 3.9 и заставил WSGI использовать ее. Однако теперь мое приложение Flask вообще не работает — я просто получаю страницу 404, настроенную для остальной части моего сайта. Я не получаю никаких ошибок при перезапуске Apache2, а журнал ошибок Apache пуст, когда я посещаю сайт. Я думаю, что ошибка должна быть связана с моей виртуальной средой, так как я создал предыдущие тестовые приложения Flask до того, как использовал тот же стиль конфигурации.
Моя виртуальная среда расположена в path/to/my/app/venv/
.
path/to/my/app/runner.wsgi
:
import sys
# Make something appear in error log if the WSGI is run at all
raise ValueError()
PROJECT_DIR = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, PROJECT_DIR)
from my_app import app as application
Часть /etc/apache2/sites-available/000-default-le-ssl.conf
:
WSGIDaemonProcess myapp user=www-data group=www-data threads=4 python-home=/path/to/my/app/venv/
WSGIScriptAlias /my-app/ path/to/my/app/runner.wsgi
/etc/apache2/mods-available/wsgi.load
LoadModule wsgi_module "/path/to/my/app/venv/lib/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-x86_64-linux-gnu.so"
WSGIPythonHome "path/to/my/app/venv"
ОС: Ubuntu 18.04.5 LTS
решение1
Ладно, я нашел проблему. Это было действительно глупо. По сути, я писал /var/www/my_app
вместо /var/www/my-app
. /etc/apache2/sites-available/000-default-le-ssl.conf
Я исправил пути, отключил сайт, включил сайт, перезагрузил Apache, и теперь он работает. Мне интересно, почему Apache хотя бы не выдает предупреждение, если не может получить доступ к файлу WSGI.
решение2
Какой пользователь запускает Apache?
Может ли этот пользователь получить доступ к вашему приложению WSGI? Проверьте это, запустив
ls -la
path и все его компоненты или используяnamei
(namei /path/....
)SELinux находится в принудительном режиме? Если да, проверьте журналы аудита.
audit2why
может быть полезно (возможно, вам придется установить некоторые пакеты).