WSGI、CGI、およびフレームワークはすべてどのように接続されていますか?
Apacheはポート80で待機します。HTTPリクエストを取得します。リクエストを解析して、応答する方法を見つけます。Apacheは対応する選択肢がたくさんあります。応答する1つの方法は、CGIを使用してスクリプトを実行することです。応答する別の方法は、単にファイルを提供することです。
CGIの場合、Apacheは環境を準備し、CGIプロトコルを介してスクリプトを呼び出します。これは、標準のUnix Fork / Execの状況です。CGIサブプロセスは、ソケットとstdoutを含むOS環境を継承します。CGIサブプロセスは、Apacheに戻る応答を書き込みます。Apacheはこの応答をブラウザーに送信します。
CGIは原始的で迷惑です。ほとんどの場合、リクエストごとにサブプロセスをフォークし、サブプロセスはstdoutとstderrを終了または終了して、応答の終了を示す必要があるためです。
WSGIは、CGI設計パターンに基づくインターフェースです。これは必ずしもCGIである必要はありません-要求ごとにサブプロセスをフォークする必要はありません。CGIでもかまいませんが、そうである必要はありません。
WSGIは、いくつかの重要な方法でCGI設計パターンに追加されます。HTTPリクエストヘッダーを解析して、環境に追加します。これは、POST指向の入力を環境内のファイルのようなオブジェクトとして提供します。また、多くのフォーマットの詳細からあなたを救う応答を公式化する関数を提供します。
基本的なCGI構成でWebフレームワーク(web.pyまたはcherrypyなど)を実行したい場合、何を知っている/インストールする/する必要がありますか?
サブプロセスのフォークはコストがかかることを思い出してください。これを回避するには2つの方法があります。
組み込み mod_wsgi
またはmod_python
Apacheの内部のPythonを埋め込みます。プロセスはフォークされません。ApacheはDjangoアプリケーションを直接実行します。
デーモン、 mod_wsgi
またはmod_fastcgi
ApacheがWSGIプロトコルを使用して別のデーモン(または「長期実行プロセス」)と対話できるようにします。実行時間の長いDjangoプロセスを開始してから、このプロセスと通信するようにApacheのmod_fastcgiを構成します。
mod_wsgi
組み込みモードまたはデーモンモードのどちらでも機能することに注意してください。
mod_fastcgiを読むと、Djangoがflupを使用して、mod_fastcgiが提供する情報からWSGI互換のインターフェースを作成していることがわかります。パイプラインはこのように機能します。
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