我有一个apache2 / mod-wsgi部署服务多个域与本质上是一个单一的应用程序。
所有域都在端口80和443上提供。
所以,我的configuration看起来像这样:
<VirtualHost *:80> #ServerName www.example.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined WSGIDaemonProcess example processes=2 threads=12 python-path=/app_path WSGIProcessGroup example WSGIScriptAlias / /scripthome ...... </VirtualHost> <VirtualHost *:80> ServerName example.com Redirect permanent / http://www.example.com/ </virtualHost> <VirtualHost _default_:443> ServerName www.example.com ErrorLog ${APACHE_LOG_DIR}/error_easyset_ssl.log CustomLog ${APACHE_LOG_DIR}/access_easyset_ssl.log combined WSGIDaemonProcess example_ssl processes=2 threads=12 python-path=/app_path WSGIProcessGroup example_ssl WSGIScriptAlias / /scripthome SSLEngine on ........ </VirtualHost>
将其复制粘贴到所有其他域,我们最终将得到一个运行许多守护进程的服务器,这个进程只是一个应用程序。 请注意,特定于域的逻辑是在应用程序内处理的,所以其他域configuration文件是相同的,除了SSL证书文件的path。 在需要SSL之前,整个事情只有一个VirtualHost。 这是从上面的configuration摘录可见的,因为我仍然使用一个单一的VirtualHost对所有域的所有端口80请求(ServerName注释掉)。
现在,这是浪费服务器资源,所以我开始考虑如何解决这个问题的文档 。 这里是相关的部分(接近WSGIDaemonProcess页面的末尾):
如果在所有虚拟主机容器之外指定 WSGIDaemonProcess指令,则可以委派任何WSGI应用程序在该守护进程组中运行。 如果在虚拟主机容器中指定WSGIDaemonProcess指令,则只有与具有与该虚拟主机相同服务器名称的虚拟主机关联的WSGI应用程序才能委派给该守护进程集。
现在,SSL显然阻止我使用第二个粗体部分,但它可以让我使用第一个。
我的问题是,我不知道如何使用第一个。 如何在VirtualHost块之外指定mod-wsgiconfiguration?