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_fastcgi
pozwala 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_wsgi
moż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 runfcgi
integrację 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