Jak WSGI, CGI i frameworki są połączone?
Apache nasłuchuje na porcie 80. Otrzymuje żądanie HTTP. Analizuje żądanie, aby znaleźć sposób odpowiedzi. Apache ma DUŻO możliwości odpowiedzi. Jednym ze sposobów odpowiedzi jest użycie CGI do uruchomienia skryptu. Innym sposobem odpowiedzi jest po prostu podanie pliku.
W przypadku CGI Apache przygotowuje środowisko i wywołuje skrypt poprzez protokół CGI. Jest to standardowa sytuacja Unix Fork / Exec - podproces CGI dziedziczy środowisko systemu operacyjnego, w tym gniazdo i standardowe wyjście. Podproces CGI zapisuje odpowiedź, która wraca do Apache; Apache wysyła tę odpowiedź do przeglądarki.
CGI jest prymitywne i denerwujące. Głównie dlatego, że forkuje podproces dla każdego żądania, a podproces musi zakończyć lub zamknąć standardowe wyjście i stderr, aby oznaczyć koniec odpowiedzi.
WSGI to interfejs oparty na wzorcu projektowym CGI. Niekoniecznie jest to CGI - nie musi forkaować podprocesu dla każdego żądania. Może to być CGI, ale nie musi.
WSGI dodaje do wzorca projektowego CGI na kilka ważnych sposobów. Analizuje nagłówki żądań HTTP i dodaje je do środowiska. Dostarcza dowolne dane wejściowe zorientowane na POST jako obiekt podobny do pliku w środowisku. Zapewnia również funkcję, która sformułuje odpowiedź, oszczędzając wiele szczegółów dotyczących formatowania.
Co muszę wiedzieć / zainstalować / zrobić, jeśli chcę uruchomić framework sieciowy (powiedzmy web.py lub cherrypy) na mojej podstawowej konfiguracji CGI?
Przypomnij sobie, że rozwidlanie podprocesu jest kosztowne. Istnieją dwa sposoby obejścia tego problemu.
Osadzony mod_wsgi lub osadzonymod_python Python w Apache; żaden proces nie jest rozwidlony. Apache uruchamia aplikację Django bezpośrednio.
Demon mod_wsgi lub mod_fastcgipozwala Apache na interakcję z oddzielnym demonem (lub „długotrwałym procesem”) przy użyciu protokołu WSGI. Rozpoczynasz swój długotrwały proces Django, a następnie konfigurujesz mod_fastcgi Apache do komunikacji z tym procesem.
Zauważ, że mod_wsgimoże działać w obu trybach: osadzony lub demon.
Kiedy czytasz o mod_fastcgi, zobaczysz, że Django używa flup do stworzenia interfejsu kompatybilnego z WSGI na podstawie informacji dostarczonych przez mod_fastcgi. Rurociąg działa w ten sposób.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django ma kilka "django.core.handlers" dla różnych interfejsów.
Dla mod_fastcgi, Django zapewnia manage.py runfcgiintegrację FLUP i handler.
W przypadku mod_wsgi istnieje do tego podstawowy program obsługi.
Jak zainstalować obsługę WSGI?
Postępuj zgodnie z tymi instrukcjami.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
W tle zobacz to
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index