Как все WSGI, CGI и фреймворки связаны?
Apache прослушивает порт 80. Получает HTTP-запрос. Он анализирует запрос, чтобы найти способ ответить. Апач имеет много вариантов ответа. Один из способов ответа - использовать CGI для запуска скрипта. Другой способ ответить - просто подать файл.
В случае CGI, Apache подготавливает среду и вызывает сценарий по протоколу CGI. Это стандартная ситуация Unix Fork / Exec - подпроцесс CGI наследует среду ОС, включая сокет и стандартный вывод. Подпроцесс CGI записывает ответ, который возвращается к Apache; Apache отправляет этот ответ в браузер.
CGI примитивен и раздражает. Главным образом потому, что он разветвляет подпроцесс для каждого запроса, а подпроцесс должен закрыть или закрыть stdout и stderr, чтобы обозначить конец ответа.
WSGI - это интерфейс, основанный на шаблоне проектирования CGI. Это не обязательно CGI - он не должен обрабатывать подпроцесс для каждого запроса. Это может быть CGI, но это не обязательно.
WSGI добавляет в шаблон проектирования CGI несколько важных способов. Он анализирует заголовки HTTP-запросов и добавляет их в среду. Он предоставляет любой POST-ориентированный ввод в виде файлового объекта в среде. Он также предоставляет вам функцию, которая будет формулировать ответ, избавляя вас от большого количества деталей форматирования.
Что мне нужно знать / установить / сделать, если я хочу запустить веб-фреймворк (скажем, web.py или cherrypy) в моей базовой конфигурации CGI?
Напомним, что разветвление подпроцесса стоит дорого. Есть два способа обойти это.
Embedded mod_wsgi
или mod_python
встраивает Python в Apache; ни один процесс не разветвлен. Apache запускает приложение Django напрямую.
Демон mod_wsgi
или mod_fastcgi
позволяет Apache взаимодействовать с отдельным демоном (или «длительным процессом»), используя протокол WSGI. Вы запускаете свой длительный процесс Django, затем настраиваете mod_fastcgi Apache для связи с этим процессом.
Обратите внимание, что mod_wsgi
может работать в любом режиме: встроенный или демон.
Когда вы прочитаете о mod_fastcgi, вы увидите, что Django использует flup для создания WSGI-совместимого интерфейса на основе информации, предоставленной mod_fastcgi. Трубопровод работает следующим образом.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django имеет несколько «django.core.handlers» для различных интерфейсов.
Для mod_fastcgi Django предоставляет manage.py runfcgi
, который объединяет FLUP и обработчик.
Для mod_wsgi для этого есть основной обработчик.
Как установить поддержку WSGI?
Следуйте этим инструкциям.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Для справки см. Это
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index