当尝试在Cen上以守护程序模式配置Django/mod_wsgi应用程序时,pythonhome选项失败

2024-04-20 08:49:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django应用程序,运行在centos7.5上,带有apache2.4和mod_wsgi4.6.4。我很难让mod\wsgi使用我想要它使用的虚拟环境。我通过yum安装了python3.6,并用它创建了一个虚拟环境。我从源代码编译mod_wsgi,使用with python选项将其指向正确的python二进制文件。我预期的(近似)Apache配置可以工作,但不起作用,如下所示:

# Required because of some third-party packages that use the 
# simplified GIL state API
WSGIApplicationGroup %{GLOBAL}

<VirtualHost *:80>
    WSGIDaemonProcess myapp python-home=/path/to/venv python-path=/path/to/my/app
    WSGIProcessGroup myapp
    WSGIScriptAlias / /path/to/my/app/wsgi.py
</VirtualHost>

<VirtualHost *:443>
    WSGIProcessGroup myapp
    WSGIScriptAlias / /path/to/my/app/wsgi.py
</VirtualHost>

此配置找不到虚拟环境中安装的任何包。倾倒系统路径显示路径不包含预期的/path/to/venv/lib/python3.6/site-packages,而是/lib/python3.6/site-packages(即系统目录)。我能够让我的应用程序运行的唯一方法是将WSGIDaemonProcess指令更改为:

^{pr2}$

第一个配置(按照建议使用python-home)在MacOS10.12和Python3.6和mod wsgi 4.5.24上确实可以工作。这两个环境之间的一个很大的区别是在CentOS服务器上启用了SELinux,但是audit2allow没有显示任何可以解释我的问题的内容。在


Tags: topathmodappwsgihomevenvmy
1条回答
网友
1楼 · 发布于 2024-04-20 08:49:16

我弄明白了。我仍然不知道为什么我第一次就不能弄清楚,但这是一个SELinux问题,正如所怀疑的那样。问题是虚拟环境目录下的所有内容都需要有httpd_sys_content_t上下文,除了动态加载的二进制库,它需要httpd_sys_script_exec_t。一旦我这样做了,python-home参数就如预期的那样工作了。在

相关问题 更多 >