Come sono collegati WSGI, CGI e i framework?
Apache è in ascolto sulla porta 80. Ottiene una richiesta HTTP. Analizza la richiesta per trovare un modo di rispondere. Apache ha MOLTE scelte per rispondere. Un modo di rispondere è utilizzare CGI per eseguire uno script. Un altro modo di rispondere è semplicemente di servire un file.
Nel caso di CGI, Apache prepara un ambiente e invoca lo script tramite il protocollo CGI. Questa è una situazione standard Unix Fork / Exec: il sottoprocesso CGI eredita un ambiente operativo compreso socket e stdout. Il sottoprocesso CGI scrive una risposta, che risale ad Apache; Apache invia questa risposta al browser.
CGI è primitivo e fastidioso. Soprattutto perché genera un sottoprocesso per ogni richiesta e il sottoprocesso deve uscire o chiudere stdout e stderr per indicare la fine della risposta.
WSGI è un'interfaccia basata sul modello di progettazione CGI. Non è necessariamente CGI - non deve eseguire il fork di un sottoprocesso per ogni richiesta. Può essere CGI, ma non deve essere.
WSGI aggiunge al modello di progettazione CGI in diversi modi importanti. Analizza le intestazioni delle richieste HTTP per te e le aggiunge all'ambiente. Fornisce qualsiasi input orientato al POST come oggetto simile a un file nell'ambiente. Ti fornisce anche una funzione che formulerà la risposta, salvandoti da molti dettagli di formattazione.
Cosa devo sapere / installare / fare se voglio eseguire un framework Web (ad esempio web.py o cherrypy) sulla mia configurazione CGI di base?
Ricordiamo che il fork di un sottoprocesso è costoso. Esistono due modi per aggirare questo.
Incorporato mod_wsgi
o mod_python
incorpora Python all'interno di Apache; nessun processo è biforcuto. Apache esegue direttamente l'applicazione Django.
Demone mod_wsgi
o mod_fastcgi
consente ad Apache di interagire con un demone separato (o "processo a esecuzione prolungata"), utilizzando il protocollo WSGI. Inizi il tuo processo Django di lunga durata, quindi configuri mod_fastcgi di Apache per comunicare con questo processo.
Nota che mod_wsgi
può funzionare in entrambe le modalità: incorporato o demone.
Quando leggi su mod_fastcgi, vedrai che Django utilizza flup per creare un'interfaccia compatibile WSGI dalle informazioni fornite da mod_fastcgi. La pipeline funziona così.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django ha diversi "django.core.handlers" per le varie interfacce.
Per mod_fastcgi, Django fornisce un manage.py runfcgi
che integra FLUP e il gestore.
Per mod_wsgi, c'è un gestore principale per questo.
Come installare il supporto WSGI?
Segui queste istruzioni.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Per lo sfondo vedi questo
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index