選択したプログラミング言語で動的なWebサイトを作成していると想像してみてください。
ユーザーがサイトにアクセスすると、http://name-of-your-site.comにリクエストが送信され、これがサーバーに渡されます。
リクエストがポート80に到着すると、HTTPサーバー(おそらくApache)によって収集されますが、LightHttpdまたはその他のHTTPサーバーである可能性があります。それはリクエストを受け取り、それをどうするかを決定します。
サイトがPythonで記述されていると想像すると、サイトは.pyファイルの束としてどこかに保存されるため、実行するファイルとその出力を返す場所の指示とともに、リクエストをPythonランタイムに渡す必要があります。ファイル。これがmod_pythonの役割です。サーバーからリクエストを受け取り、ランタイムに渡します。ほとんどのmodはスレッドプールも処理します-1分間に20のリクエストがあり、それぞれが単純な方法でpythonランタイムに渡されると、20のpythonスレッドがすべて起動し、一緒に実行され、プロセスが完了すると終了します。 。通常、Apache modsはいくつかのスレッドを稼働させ続け、起動時間を節約し、既存のスレッドの1つに新しいリクエストを渡すだけで、1つのリクエストが完了すると、インターフェイスから別のリクエストが渡されます。CGIコンテナは少し異なる方法で同じ仕事をします。どちらかを選択する理由は、使用しているHTTPサーバーに関連している可能性があります(mod_pythonはApache用に設計されています。たとえば、FastCGIのようなものがより多く使用されますLightHttpd)およびパフォーマンスの考慮事項。FastCGIのようなものを使用している場合は、CGIコンテナとプログラミング言語ランタイムの間にインターフェイスの第2層が必要になる可能性があります。
したがって、作業しているレイヤーは次のようになります。
HTTP Server-> CGI Layer -> Programming Language Runtime -> your code
Apache -> mod_python -> Python Runtime -> index.py
LightHttpd -> FastCGI+python_cgi -> Python Runtime -> index.py
明らかに、ここでは例としてPythonを使用しましたが、ほとんどの主流言語(および多くの難解な言語)に相当するmodとcgiコンテナーを見つけることができ、使用しているHttpスタックはほとんどの場合ほぼ同じです。