¿Cómo están conectados WSGI, CGI y los marcos?
Apache escucha en el puerto 80. Recibe una solicitud HTTP. Analiza la solicitud para encontrar una manera de responder. Apache tiene MUCHAS opciones para responder. Una forma de responder es usar CGI para ejecutar un script. Otra forma de responder es simplemente servir un archivo.
En el caso de CGI, Apache prepara un entorno e invoca el script a través del protocolo CGI. Esta es una situación estándar de Unix Fork / Exec: el subproceso CGI hereda un entorno de sistema operativo que incluye el socket y la salida estándar. El subproceso CGI escribe una respuesta, que vuelve a Apache; Apache envía esta respuesta al navegador.
CGI es primitivo y molesto. Principalmente porque bifurca un subproceso para cada solicitud, y el subproceso debe salir o cerrar stdout y stderr para indicar el final de la respuesta.
WSGI es una interfaz que se basa en el patrón de diseño CGI. No es necesariamente CGI, no tiene que bifurcar un subproceso para cada solicitud. Puede ser CGI, pero no tiene que serlo.
WSGI se suma al patrón de diseño CGI de varias maneras importantes. Analiza los encabezados de solicitud HTTP por usted y los agrega al entorno. Proporciona cualquier entrada orientada a POST como un objeto similar a un archivo en el entorno. También le proporciona una función que formulará la respuesta, lo que le ahorrará muchos detalles de formato.
¿Qué necesito saber / instalar / hacer si quiero ejecutar un marco web (digamos web.py o cherrypy) en mi configuración básica de CGI?
Recuerde que bifurcar un subproceso es costoso. Hay dos formas de solucionar esto.
Embebido mod_wsgi
o mod_python
incrusta Python dentro de Apache; Ningún proceso se bifurca. Apache ejecuta la aplicación Django directamente.
Daemon mod_wsgi
o mod_fastcgi
permite que Apache interactúe con un demonio separado (o "proceso de larga ejecución"), utilizando el protocolo WSGI. Comienza su proceso de Django de larga duración, luego configura el mod_fastcgi de Apache para comunicarse con este proceso.
Tenga en cuenta que mod_wsgi
puede funcionar en cualquier modo: incrustado o demonio.
Cuando lea sobre mod_fastcgi, verá que Django usa flup para crear una interfaz compatible con WSGI a partir de la información proporcionada por mod_fastcgi. La tubería funciona así.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django tiene varios "django.core.handlers" para las distintas interfaces.
Para mod_fastcgi, Django proporciona un manage.py runfcgi
que integra FLUP y el controlador.
Para mod_wsgi, hay un controlador principal para esto.
¿Cómo instalar el soporte WSGI?
Siga estas instrucciones.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Para el fondo vea esto
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index