我有许多网站,每个网站都使用相同的 5 个 Django 应用程序(具有本地设置),托管在 Apache 上。目前每个站点应用程序都有自己的配置如下:
WSGIDaemonProcess api_example threads=15 maximum-requests=2000
WSGIProcessGroup api_example
WSGIScriptAlias /api /var/www/sites/example/api/site.wsgi
是否可以在虚拟主机之间共享守护进程,但保持本地设置处于活动状态?我的目标是节省内存,并减少为服务请求启动的 Apache 进程的数量(其中一些应用程序是仅偶尔使用的管理/支持控制台)。
- 编辑 -
正如 Graham Dumpleton 在这里阐述的:mod_wsgi daemon mode - WSGIDaemonProcess per virtual host configuration? ,应该有可能“只要 [因为它具有] 相同的服务器名称,就可以访问先前虚拟主机中的守护进程定义。” 请注意,正如 Graham 指出的那样,WSGIApplicationGroup 指令必须从默认值进行调整,可能调整为 %{GLOBAL} 或 %{ENV:variable}。
我不确定如何在虚拟主机中“使用”服务器级声明。是否可以使用具有本地设置的服务器级守护进程?
以上问题的答案,总结为:
以上所有问题的答案都是肯定的。
下面是一个示例配置,以 Debian 的 apache2 配置为例:
定义一些 wsgi 守护进程,例如:
在您的虚拟主机配置中,按照以下行定义一个块:
这是做什么的:
<this_vhost>
的支持应用程序被访问时,它将附加到 wsgi_support 守护进程,因为这是由 WSGIProcessGroup 指令定义的<this_vhosts>
该应用程序的副本在其自己的命名空间中运行(例如,如果您正在运行 Django 应用程序,这一点至关重要,因为设置仅在启动时评估)虚拟主机被赋予其自己的 WSGIApplicationGroup。这会导致主守护进程为 的应用生成一个子解释器<this_vhost>
。请阅读http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives上的优秀文档。
最初有两件事让我感到困惑:没有在正确的位置定义 wsgi_daemon(这非常愚蠢),并且没有意识到 WSGIProcessGroup 指令指向 WSGIDaemonProcess 定义。