在 Windows 上运行的 Apache 中托管的 Django 应用程序 - 服务无法启动

在 Windows 上运行的 Apache 中托管的 Django 应用程序 - 服务无法启动

我发现了许多类似的文章,其中有一些文章都存在类似的问题,其中几篇的结论是,Apache 服务根本无法在我的环境中运行。但是我确实让该服务运行了——只是它需要的设置不符合安全要求。

情况是:我有一个 Django 4.2.9 项目,托管在 Apache 2.4 中,使用 mod_wsgi 5.0.0,全部在 Windows 2016 Server 上。

当我从服务器帐户的命令行运行 Apache 时Administrator,它​​运行完美。

当我使用 安装 Apache 2.4 服务httpd.exe -k install,然后手动重新配置该服务以作为 登录时.\Administrator,它也能完美运行。

但是,如果我以 身份登录LocalSystem或以任何其他用户帐户登录来运行该服务,则该服务将无法启动。 (旁注:我已确认所有帐户都启用了“作为服务登录”的权限,所以这不是问题。) 错误如下图所示:

在此处输入图片描述

并且-- 如果我尝试httpd.exe从其他用户帐户的命令行运行,则可执行文件会失败。日志文件中生成的错误是:

[Fri Jan 05 14:28:08.201284 2024] [wsgi:info] [pid 5712:tid 372] mod_wsgi (pid=5712): Initializing Python.
Python path configuration:
PYTHONHOME = (not set)
PYTHONPATH = (not set)
program name = 'python'
isolated = 0
environment = 1
user site = 1
import site = 1
sys._base_executable = 'D:\\Program Files\\Apache24\\bin\\httpd.exe'
sys.base_prefix = 'C:\\Program Files\\Python310'
sys.base_exec_prefix = 'C:\\Program Files\\Python310'
sys.platlibdir = 'lib'
sys.executable = 'D:\\Program Files\\Apache24\\bin\\httpd.exe'
sys.prefix = 'C:\\Program Files\\Python310'
sys.exec_prefix = 'C:\\Program Files\\Python310'
sys.path = [
    'C:\\Program Files\\Python310\\python310.zip',
    '.\\DLLs',
    '.\\lib',
    'D:\\Program Files\\Apache24\\bin',
  ]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'
Current thread 0x000011d8 (most recent call first): <no Python frame>
[Fri Jan 05 14:28:08.217284 2024] [mpm_winnt:crit] [pid 4432:tid 368] AH00419: master_main: create child process failed. Exiting.

因此,这里的共同因素似乎是它适用于该Administrator帐户,但不适用于任何其他帐户。我只是不知道为什么……或者如何纠正它。

mod_wsgi-express module-config进一步的相关信息:这是我从命令中获取并粘贴到我的httpd.conf文件中的wsgi 配置信息:

LoadFile "C:/Program Files/Python310/python310.dll"
LoadModule wsgi_module "D:/CSCatalog/django-projects/code/cscr/.venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win_amd64.pyd"
WSGIPythonHome "D:/CSCatalog/django-projects/code/cscr/.venv"

答案1

Python path configuration:
PYTHONHOME = (not set)
PYTHONPATH = (not set)
[...]
ModuleNotFoundError: No module named 'encodings'

是错误消息。encodings是一个系统模块,因此它应该在默认安装路径中可用。

我猜测 Adminsitrator 用户有环境变量PYTHONPATH设置,但其他用户没有,因此出现错误消息。

你可以为服务设置环境变量

答案2

尝试将服务配置为以您想要使用的特定用户启动,但之前您需要向该用户授予“作为服务登录”权限

授予“作为服务登录”权限的策略配置

相关内容