mod-wsgi 一个守护进程用于具有不同 ServerNames 的多个 VirtualHosts

mod-wsgi 一个守护进程用于具有不同 ServerNames 的多个 VirtualHosts

我有一个 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。从上面的配置摘录中可以看出这一点,因为我仍然对所有域的所有端口 80 请求使用一个 VirtualHost(ServerName 已注释掉)。

现在,这浪费了服务器资源,所以我开始研究文档如何补救这个。以下是相关部分(靠近页面末尾WSGIDaemonProcess):

如果 WSGIDaemonProcess 指令是在所有虚拟主机容器之外指定,任何 WSGI 应用程序都可以委托在该守护进程组内运行。如果指定了 WSGIDaemonProcess 指令在虚拟主机容器内,只有与具有与该虚拟主机相同服务器名称的虚拟主机关联的 WSGI 应用程序才可以被委托给该组守护进程。

现在,SSL 显然阻止我使用第二个加粗部分,但它允许我使用第一个部分。

我的问题是我不知道如何使用第一个。如何在VirtualHost块之外指定 mod-wsgi 配置?

答案1

您可以在 apache 配置的 mods-enabled 子目录中的 wsgi 模块的 wsgi.conf 文件中配置 WSGIDaemonProcess 指令以及其他指令。

所以它应该类似于 /etc/apache2/mods-enabled/wsgi.conf

相关内容