我在 redhat 上的同一个 apache 实例下配置了几个虚拟主机:
- 阿帕奇-2.2.15
- mod_wsgi-3.5 使用默认系统 python-2.6 编译
对于每个虚拟主机WSGIScriptAlias
设置指向激活虚拟环境的python文件:
activate_this = '/path_to_the_virtualenv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
现在,我计划将其中一个项目升级到 python-2.7,将另一个项目升级到 python-3.x。我知道我可以拥有不同的虚拟环境,单独的 python 沙箱。所以,python 方面一切都很好。
问题是:在同一个 apache+mod_wsgi 实例下,不同的 apache 虚拟主机可以使用不同的 python 版本吗?
如果不是,那么最好的选择是什么?
有一个相关的WsgiPythonHome
设置,但它是在“服务器配置”上下文中全局定义的,而不是每个虚拟主机。另外,mod_wsgi 是针对特定 python 版本编译的,所以我不确定它是否可以处理这种情况。
答案1
不,这是不可能的。mod_wsgi 二进制文件只能针对一个 Python 版本进行编译,并且一次只能将一个已编译的 mod_wsgi 模块实例加载到 Apache 中。
您需要做的是设置 Apache 来代理到监听其自己端口的单独 WSGI 服务器。
要使用 Apache/mod_wsgi 作为后端服务器,您可能需要研究使用 mod_wsgi 4.1.X。请参阅:
此新版本的 mod_wsgi 提供了一种针对多个 Python 版本安装 mod_wsgi 的方法,并使用提供的脚本为每个版本运行一个 Apache 实例。该脚本接管了 Apache 配置的所有设置,因此您无需担心。