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 つの方法があります。
Python を Apache 内に埋め込むmod_wsgi
か、埋め込みます。mod_python
プロセスはフォークされません。Apache は Django アプリケーションを直接実行します。
Daemon mod_wsgi
またはmod_fastcgi
、WSGI プロトコルを使用して、Apache が別のデーモン (または「長時間実行プロセス」) と対話できるようにします。長時間実行される 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