¿Por qué Apache2 no encuentra mi aplicación WSGI?

¿Por qué Apache2 no encuentra mi aplicación WSGI?

En mi pregunta anterior, pregunté cómo hacer que mod_wsgi use una versión específica de Python. Siguiendo la respuesta a esa pregunta, creé un entorno virtual Python 3.9 e hice que WSGI lo usara. Sin embargo, ahora mi aplicación Flask no se está ejecutando en absoluto; simplemente configuré la página 404 para el resto de mi sitio. No obtengo errores al reiniciar Apache2 y el registro de errores de Apache está vacío cuando visito el sitio. Creo que el error debe deberse a mi entorno virtual, ya que creé aplicaciones Flask de prueba anteriores antes de usar el mismo estilo de configuración.

Mi entorno virtual se encuentra en 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

Parte de /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"

Sistema operativo: Ubuntu 18.04.5 LTS

Respuesta1

Bien, encontré el problema. Fue realmente estúpido. Básicamente, estaba escribiendo /var/www/my_appen lugar de /var/www/my-appen /etc/apache2/sites-available/000-default-le-ssl.conf. Arreglé las rutas, deshabilité el sitio, habilité el sitio, recargué Apache y ahora funciona. Tengo curiosidad por saber por qué Apache no da al menos una advertencia si no puede acceder al archivo WSGI.

Respuesta2

  • ¿Qué usuario ejecuta Apache?

  • ¿Ese usuario realmente puede acceder a su aplicación WSGI? Verifique esto ejecutando ls -lala ruta y todos sus componentes, o usando namei( namei /path/....)

  • ¿Está SELinux en modo de cumplimiento? Si es así, consulte los registros de auditoría. audit2whypuede ser útil (es posible que tengas que instalar algunos paquetes).

información relacionada