为什么 Apache2 找不到我的 WSGI 应用程序?

为什么 Apache2 找不到我的 WSGI 应用程序?

在我之前的问题中,我问过如何让 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-appin /etc/apache2/sites-available/000-default-le-ssl.conf。我修复了路径,禁用了网站,启用了网站,重新加载了 Apache,现在它可以正常工作了。我很好奇为什么 Apache 在无法访问 WSGI 文件时至少不发出警告。

答案2

  • 哪个用户正在运行 Apache?

  • 该用户是否真的可以访问您的 WSGI 应用程序?通过ls -la在路径及其所有组件上运行来检查这一点,或者使用namei( namei /path/....)

  • SELinux 是否处于强制模式?如果是,请检查审计日志。audit2why可能会有用(您可能需要安装一些软件包)。

相关内容