質問: **Q1.PHPのモジュールモードに該当するものは、Pythonでは何に該当するのでしょうか?** ・PHPには「モジュールモード」と「CGIモード」があるのですが、Pythonで言うところの「CGI」と言うのは、PHPの「CGIモード」と同じ意味でしょうか? ・例えば、「Python」と「mod_wsgi」の組み合わせをApacheで動かしても、CGIで動かしていることになるのでしょうか? --- **Q2.「cgi」「wsgi」「mod_wsgi」の違い** ・wsgiは、cgiの一種? ・mod_wsgiは、wsgiの一種? ・例えば.confファイルに下記のように記述した場合、それぞれ意味は異なる? > > AddHandler cgi-script .py > > AddHandler wsgi-script .py > > > --- **Q3.デーモンモード** ・WSGIDaemonProcessと記述すると、デーモンモード (Apacheとは別のプロセス)で動作する、と書いてあったのですが、これは分類すると何に該当するのでしょうか? ・wsgiの一種?
回答: > > Q1.PHPのモジュールモードに該当するものは、Pythonでは何に該当するのでしょうか? > > > mod_python が近いかもしれません。 mod_pythonの後継がmod_wsgiといって良いでしょう。 mod_wsgiが誕生してからはmod_pythonは使われなくなった、と記憶しています。 > > ・PHPには「モジュールモード」と「CGIモード」があるのですが、Pythonで言うところの「CGI」と言うのは、PHPの「CGIモード」と同じ意味でしょうか? > > > はい。CGIの規格にそった入出力インターフェースを備えた実行可能ファイルはCGIと呼んで良いでしょう。 この場合、 `*.py` ファイルが実行可能で、ブラウザからのリクエストを標準入力経由で受け取って、標準出力にブラウザへの応答を返すことになります。 > > ・例えば、「Python」と「mod_wsgi」の組み合わせをApacheで動かしても、CGIで動かしていることになるのでしょうか? > > > いいえ。その言い方でいくと、mod_pythonの方が近いです。 mod_wsgiの場合は、wsgi規格(PEP-3333)にそったインターフェースを備えたPythonコードをApacheのmod_wsgi経由で起動することになります。 > > Q2.「cgi」「wsgi」「mod_wsgi」の違い > > ・wsgiは、cgiの一種? > > > いいえ。wsgi規格のインターフェースを実装したPythonスクリプトです。 なので、CGIではありません。 拡張子は `.wsgi` となっていても、中身はPythonスクリプトです。 このスクリプトは `application` というモジュールグローバルな変数を提供する必要があります。 applicationはWSGI規格に沿ったAPIを実装し、WSGIの通信プロトコルに従ってデータの入出力を行います。 > > ・mod_wsgiは、wsgiの一種? > > > はい。 正確には、「Apacheプロセスから、WSGIインターフェースを備えたPythonのプログラムと通信するために使用する、Apacheのモジュール」がmod_wsgiです。 > > ・例えば.confファイルに下記のように記述した場合、それぞれ意味は異なる? > > > AddHandler cgi-script .py > > AddHandler wsgi-script .py > > > 異なります。 これを定義したセクションで、 `.py` ファイルをどのハンドラーで動作させたいかを決定するために使用します。上記のように2種類同時に設定できるのかな?wsgiとして使うのであればAddHandlerではなくWSGIScriptAliasで指定したほうが設定が簡潔でよいです。 > > Q3.デーモンモード > > ・WSGIDaemonProcessと記述すると、デーモンモード (Apacheとは別のプロセス)で動作する、と書いてあったのですが、これは分類すると何に該当するのでしょうか? > > ・wsgiの一種? > > > wsgiです。 WSGIDaemonProcessを指定しない場合と、指定した場合とでデーモンプロセスの起動方法が異なります。 デーモンプロセスはどちらにしても使われるし、インターフェースはwsgiです。 WSGIDaemonProcessを指定しない場合、起動されたデーモンプロセスは全てのアプリケーションで使い回されます。WSGIDaemonProcessを指定した場合、アプリを提供するユーザー毎に異なるデーモンプロセスを使用します。つまり、共用サーバー等で複数のユーザーがwsgiアプリを動かしたい場合に、セキュリティーの向上やクラッシュ時の影響範囲などをユーザー単位に抑えるために指定するオプションです。