我有一个相当简单的问题。 当mod_wsgi在守护进程模式下运行,并且在每个虚拟主机的基础上启用WSGIDaemonProcess和WSGIProcessGroup指令时,这些指令是否也被其他虚拟主机拾取?
例如,如果我有:
<VirtualHost *:80> WSGIDaemonProcess example.com processes=2 threads=15 display-name=%{GROUP} WSGIProcessGroup example.com </VirtualHost> <VirtualHost *:443> WSGIProcessGroup example.com </VirtualHost>
第二个443虚拟主机是否会使用前80个虚拟主机中定义的现有“example.com”进程组? 还是必须在第二个443虚拟主机中重新定义一个单独的进程组?
在以下地方引用文档:
http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess
行为是:
如果在所有虚拟主机容器之外指定WSGIDaemonProcess指令,则可以委派任何WSGI应用程序在该守护进程组中运行。 如果在虚拟主机容器中指定WSGIDaemonProcess指令,则只有与具有与该虚拟主机相同服务器名称的虚拟主机关联的WSGI应用程序才能委派给该守护进程集。
因此,只要服务器名称相同,您就可以在之前的虚拟主机中跨越守护进程定义。
您还需要了解以下内容:
http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIApplicationGroup
其中对于WSGIApplicationGroup(即,如果未指定)是默认的:
%{RESOURCE}
将%{SERVER}variables的应用程序组名称设置为服务器主机名和端口,将WSGI环境variablesSCRIPT_NAME的值附加到该variables,并用文件分隔符分隔。
例如,如果虚拟主机www.example.com正在处理端口8080上的请求,并且映射到WSGI应用程序的URLpath是http://www.example.com/wsgi-scripts/foo ,则应用程序组名称将被设置为www.example.com:8080|/wsgi-scripts/foo。
使用%{RESOURCE}variables扩展的效果是将任何服务器上的每个应用程序通过映射到其自己的Python子解释器而与其他应用程序隔离。
所以,通常情况下,如果在不同端口的两个虚拟主机上为相同的装入点分开了WSGIScriptAlias,那么这两个应用程序实例仍然可以通过在不同的子解释器中运行来分开。
虽然对于端口80/443的情况,这个规则有一个例外,即端口实际上并不包含在应用程序组名中。 因此在这种情况下,安装在相同安装点的应用程序将运行在相同的子解释器中。
这个例外情况可能没有尽可能清楚地解释,但是这个定义已经涵盖了这个例外:
%{服务器}
应用程序组名称将被设置为服务器主机名。 如果请求通过非标准HTTP / HTTPS端口到达,端口号将作为后缀添加到由冒号分隔的组名中。
例如,如果虚拟主机www.example.com正在处理标准HTTP端口(80)和HTTPS端口(443)上的请求,则到达任一端口的请求都会将应用程序组名称设置为www.example.com 。 如果虚拟主机正在处理端口8080上的请求,则应用程序组名称将设置为www.example.com:8080。
作为上述默认扩展的一部分的扩展。