Назад | Перейти на главную страницу

mod-wsgi один демон для нескольких виртуальных хостов с разными именами серверов

У меня есть развертывание 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 ко всем доменам (имя сервера закомментировано).

Это трата ресурсов сервера, поэтому я начал изучать документация на как исправить этот. Вот соответствующий раздел (ближе к концу WSGIDaemonProcess страница):

Если директива WSGIDaemonProcess указан вне всех контейнеров виртуального хоста, любое приложение WSGI может быть делегировано для запуска в этой группе процессов демона. Если указана директива WSGIDaemonProcess в контейнере виртуального хоста, только приложения WSGI, связанные с виртуальными хостами с тем же именем сервера, что и этот виртуальный хост, могут быть делегированы этому набору процессов демона.

Теперь, очевидно, что SSL не позволяет мне использовать вторую часть, выделенную жирным шрифтом, но позволяет использовать первую.

Моя проблема в том, что я не знаю, как пользоваться первым. Как указать конфигурацию mod-wsgi вне VirtualHost блок?

Вы можете настроить директиву WSGIDaemonProcess, а также другие директивы в файле wsgi.conf модуля wsgi, расположенном в подкаталоге с поддержкой модов вашей конфигурации apache.

Так что это должно быть что-то вроде /etc/apache2/mods-enabled/wsgi.conf