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

mod_wsgi daemon mode - WSGIDaemonProcess для каждой конфигурации виртуального хоста?

У меня был довольно простой вопрос. Когда 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 использовать существующую группу процессов «example.com», определенную в первом виртуальном хосте 80? Или мне нужно переопределить отдельную группу процессов во втором виртуальном хосте 443?

Цитата из документации по адресу:

http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess

поведение:

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

Таким образом, вы можете обратиться к определению процесса демона на предыдущем виртуальном хосте, если имя сервера такое же.

Вы также должны знать, что сказано в:

http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIApplicationGroup

при этом по умолчанию для WSGIApplicationGroup (то есть, если не указано):

%{РЕСУРС}

В качестве имени группы приложений будут заданы имя хоста и порт сервера, как для переменной% {SERVER}, к которой добавляется значение переменной среды WSGI SCRIPT_NAME, разделенное символом разделителя файлов.

Например, если виртуальный хост www.example.com обрабатывал запросы через порт 8080, а URL-путь, сопоставленный с приложением WSGI, был http://www.example.com/wsgi-scripts/foo, тогда имя группы приложений будет установлено на www.example.com:8080|/wsgi-scripts/foo.

Эффект от использования расширения переменной% {RESOURCE} заключается в том, что каждое приложение на любом сервере будет изолировано от всех остальных путем сопоставления с его собственным подинтерпретатором Python.

Итак, обычно, если бы у вас были отдельные WSGIScriptAlias ​​для одной и той же точки монтирования на двух виртуальных хостах для разных портов, два экземпляра приложения все равно были бы разделены путем запуска в разных суб-интерпретаторах.

Однако из этого правила есть исключение для случая порта 80/443, когда порт фактически не включен в имя группы приложений. Таким образом, в этом случае приложения, смонтированные в одной точке монтирования, будут работать в одном субинтерпретаторе.

Это исключение, вероятно, не объясняется так четко, как могло бы, но охватывается определением:

% {СЕРВЕР}

В качестве имени группы приложений будет задано имя хоста сервера. Если запрос поступил через нестандартный порт HTTP / HTTPS, номер порта будет добавлен как суффикс к имени группы, разделенный двоеточием.

Например, если виртуальный хост www.example.com обрабатывает запросы через стандартный порт HTTP (80) и порт HTTPS (443), запрос, поступающий на любой порт, будет видеть, что имя группы приложений будет установлено на www.example.com. . Если вместо этого виртуальный хост обрабатывал запросы через порт 8080, тогда имя группы приложений было бы установлено на www.example.com:8080.

это расширение того, что используется как часть указанного выше расширения по умолчанию.