我有一个 apache2 / mod-wsgi 部署服务多个域,本质上是一个应用程序。
所有域都在端口 80 和 443 上提供服务。
所以,我的配置看起来像:
<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>
将其复制粘贴到所有其他域,我们最终会得到一台运行许多守护进程的服务器,而这实际上只是一个应用程序。请注意,特定于域的逻辑在应用程序中处理,因此所有其他域配置文件都是相同的,除了 SSL 证书文件的路径。在需要 SSL 之前,整个事情只有一个 VirtualHost。从上面的配置摘录中可以看出这一点,因为我仍在使用一个 VirtualHost 来处理对所有域的所有端口 80 请求(ServerName 已注释掉)。
现在,这是在浪费服务器资源,所以我开始研究如何解决这个问题的文档。这是相关部分(接近页面末尾):WSGIDaemonProcess
如果在所有虚拟主机容器之外指定了 WSGIDaemonProcess 指令,则可以委托任何 WSGI 应用程序在该守护进程组中运行。如果在虚拟主机容器中指定了 WSGIDaemonProcess 指令,则只有与具有与该虚拟主机相同的服务器名称的虚拟主机关联的 WSGI 应用程序才能被委托给该组守护进程。
现在,SSL 显然阻止我使用第二个粗体部分,但它允许我使用第一个。
我的问题是我不知道如何使用第一个。如何在VirtualHost
块之外指定 mod-wsgi 配置?
您可以在 wsgi 模块的 wsgi.conf 文件中配置 WSGIDaemonProcess 指令以及其他指令,该文件位于 apache 配置的 mods-enabled 子目录中。
所以它应该类似于 /etc/apache2/mods-enabled/wsgi.conf