我有许多站点都使用相同的5 Django应用程序(本地设置),托pipe在Apache上。 目前每个网站的应用程序都有自己的configuration如下:
WSGIDaemonProcess api_example threads=15 maximum-requests=2000 WSGIProcessGroup api_example WSGIScriptAlias /api /var/www/sites/example/api/site.wsgi
是否有可能在虚拟主机之间共享守护进程,但保持本地设置处于活动状态? 我的目标是节省内存,并减less启动服务请求的Apache进程的数量(其中几个应用程序是仅偶尔使用的pipe理/支持控制台)。
– 编辑 –
正如Graham Dumpleton在这里提出的: mod_wsgi守护进程模式 – WSGIDaemonProcess每个虚拟主机configuration? ,应该有可能“超越先前虚拟主机中的守护进程定义,因为它具有相同的服务器名称”。 请注意,正如Graham指出的那样,WSGIApplicationGroup指令必须从默认值调整为%{GLOBAL}或%{ENV:variable}。
我不确定如何在虚拟主机中“使用”服务器级别的声明。 是否有可能使用服务器级守护进程与本地设置?
上述问题的答案总结为:
以上所有答案都是肯定的 。
以下是一个configuration示例,以Debian的apache2configuration为例:
... # Include definition of wsgi_daemons above the vhost configs Include /etc/apache2/wsgi_daemons/ # Include the virtual host configurations: Include /etc/apache2/sites-enabled/ ...
定义一些wsgi守护进程,例如:
WSGIDaemonProcess wsgi_support threads=5 \ display-name=wsgi_support inactivity-timeout=600
在您的虚拟主机configuration中,沿着以下几行定义一个块:
<Location /support/console> WSGIProcessGroup wsgi_support WSGIApplicationGroup <this_vhost>_support # WSGIApplicationGroup %{GLOBAL} does not work!!! </Location> WSGIScriptAlias /support/ /var/www/<this_vhost>/support/site.wsgi
这是什么:
<this_vhost>的支持应用程序时,它将附加到wsgi_support守护进程,因为这是由WSGIProcessGroup指令定义的 <this_vhosts>副本在其自己的命名空间中运行(如果您正在运行Django应用程序,这是非常重要的,因为设置仅在启动时进行计算),则会为vhost提供自己的WSGIApplicationGroup。 这使得主守护进程为<this_vhost>的应用产生一个子解释器。 请阅读http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives上的优秀文档。
最初有两件事让我感到沮丧:没有在正确的位置定义wsgi_daemons(这非常愚蠢),也没有意识到WSGIProcessGroup指令指向WSGIDaemonProcess定义。