Warum findet Apache2 meine WSGI-App nicht?

Warum findet Apache2 meine WSGI-App nicht?

In meiner vorherigen Frage habe ich gefragt, wie man mod_wsgi dazu bringt, eine bestimmte Python-Version zu verwenden. Als Antwort auf diese Frage habe ich eine virtuelle Python 3.9-Umgebung erstellt und WSGI dazu gebracht, diese zu verwenden. Jetzt läuft meine Flask-App jedoch überhaupt nicht – ich bekomme nur die 404-Seite, die für den Rest meiner Site konfiguriert ist. Ich erhalte keine Fehler, wenn ich Apache2 neu starte, und das Apache-Fehlerprotokoll ist leer, wenn ich die Site besuche. Ich denke, der Fehler muss an meiner virtuellen Umgebung liegen, da ich zuvor bereits Test-Flask-Apps mit demselben Konfigurationsstil erstellt habe.

Meine virtuelle Umgebung befindet sich in 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

Teil von /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"

Betriebssystem: Ubuntu 18.04.5 LTS

Antwort1

Ok, ich habe das Problem gefunden. Es war wirklich dumm. Im Grunde habe ich /var/www/my_appstatt /var/www/my-appin geschrieben /etc/apache2/sites-available/000-default-le-ssl.conf. Ich habe die Pfade repariert, die Site deaktiviert, die Site aktiviert, Apache neu geladen und jetzt funktioniert es. Mich würde interessieren, warum Apache nicht wenigstens eine Warnung ausgibt, wenn es nicht auf die WSGI-Datei zugreifen kann.

Antwort2

  • Welcher Benutzer führt Apache aus?

  • Kann dieser Benutzer tatsächlich auf Ihre WSGI-Anwendung zugreifen? Überprüfen Sie dies, indem Sie ls -laden Pfad und alle seine Komponenten ausführen oder indem Sie namei( namei /path/....) verwenden.

  • Befindet sich SELinux im Durchsetzungsmodus? Wenn ja, überprüfen Sie die Prüfprotokolle. audit2whyDies kann hilfreich sein (möglicherweise müssen Sie einige Pakete installieren).

verwandte Informationen