У меня был довольно простой вопрос. Когда 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.
это расширение того, что используется как часть указанного выше расширения по умолчанию.