python - Apache 总是在没有日志或终端反馈的情况下抛出 500 内部服务器错误
问题描述
当我在 localhost 服务器中遇到错误时,我正在使用 django 和 Apache2。Apache 会抛出 500 Internal Server Error,没有日志或终端反馈。我用官方 Apache2 安装了 mod_wsgi。我的 apache2.conf 看起来像这样:
WSGIPythonHome "/usr"
WSGIPythonPath var/www/mysite
<VirtualHost *:80>
WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py
LoadModule wsgi_module "/home/server/.local/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"
<Directory /var/www/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess 127.0.1.1 python-path=/var/www/mysite python-home=/usr
WSGIProcessGroup 127.0.1.1
Alias /file.zip /var/www/mysite/static/file.zip
Alias /static/ /var/www/mysite/static/
<Directory /var/www/mysite/static>
Require all granted
</Directory>
</VirtualHost>
当我刚开始使用 apache 时,我确实有一些日志。他们告诉我它无法从 wsgi.py 导入 django,但我认为这些不会有太大帮助,因为它们是很久以前生成的。我把它留在里面,以防万一。我已经尝试了两天查看多个 Stack Exchange 站点,但没有找到合理的解释。我使用 sudo apachectl start 启动我的服务器。有人可以帮我找出为什么会发生这种情况以及如何预防吗?谢谢!
编辑:
我删除了旧的错误日志并再次运行该程序。错误日志显示无法从wsgi.py导入django,和之前我一开始创建的错误日志一样。
解决方案
有一个很好的服务 django 和 apache教程。它很旧,但它仍然应该很好地适用于您的情况。
从您的配置文件中,您的问题似乎出在以下两行之一:
LoadModule wsgi_module "/home/server/.local/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"
WSGIDaemonProcess 127.0.1.1 python-path=/var/www/mysite python-home=/usr
您可能使用了错误的模块或错误的路径。我不知道该模块,但您可以检查路径,特别是与python-home
.
首先检查您是否已全局安装了 django python -m django --version
:. (如果您同时拥有 v2 和 v3,请使用 python3)
如果它在全局中,则检查查找 python 的安装位置(如果它不是默认目录)以查看您的 python 的安装位置并使用该路径。
如果您收到未安装的错误,您可能正在为您的项目使用虚拟环境。然后改用该路径。存在不同的虚拟环境程序,因此您需要检查它们的文档以找到所需的路径。例如,它可能在/var/www/mysite/venv
. 那么它将是:
WSGIDaemonProcess 127.0.1.1 python-path=/var/www/mysite python-home=/var/www/mysite/venv
警告:某些虚拟环境无法移动。例如,如果您的项目在“/home/user/webproject”下,您在其中使用了“python -m venv venv”,并尝试将文件夹复制到 apache 下,则此虚拟环境路径将不起作用。在这种情况下,您将需要pip freeze
程序。
我可以看出你的Loadmodule
台词在困扰我的是什么。
首先,它显示您已经安装了本地 python,/home/server/.local/lib/python3.8/
因此您可以将其用作您的python-home
,但我不建议使用用户文件夹下的位置。
然后,用于/usr/sbin/httpd -M
查看 apache 是否启动并加载模块。您可能没有将其设置为从该位置读取用户目录。它也可能只是引号的问题,删除引号。
简而言之,您私下从事您的项目,但 apache 将为公众服务。确保您在另一个文件夹中使用单独的安装,apache 可以自由读取/写入,而不会影响用户。
推荐阅读
- typescript - 使用标签泛型创建接口外的联合
- python-3.x - 从标准偏差拉伸带创建新栅格(.tif),与 dstack 一起使用,但不编写新文件,Python
- php - 如何将数组作为参数绑定到具有未知数量变量(程序)的准备好的语句?
- javascript - 将不同页面的 javascript 文件捆绑在一起时出错
- python - 一个数的乘法表的问题
- oracle - Delphi TsqlConnection 错误密码将过期
- python - 如何使硒通过HTML中的属性识别按钮并在python中尽可能自动单击它
- c# - 被 CORS 阻止
- javascript - JavaScript 中的循环更改监听和计数循环
- jmeter - 金牛座。重用具有不同变量的常见场景