34731


**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の一種？


CC BY-SA 3.0
2017-05-14T14:04:53.353
34704
2017-05-15T14:07:52.887
7886
question
python
PHPのモジュールモードに該当するものは、Pythonでは何に該当するのでしょうか？


> 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](https://www.python.org/dev/peps/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で指定したほうが設定が簡潔でよいです。  
<http://modwsgi.readthedocs.io/en/develop/configuration-
directives/WSGIScriptAlias.html>

> Q3.デーモンモード  
>  ・WSGIDaemonProcessと記述すると、デーモンモード
> (Apacheとは別のプロセス)で動作する、と書いてあったのですが、これは分類すると何に該当するのでしょうか？  
>  ・wsgiの一種？

wsgiです。  
WSGIDaemonProcessを指定しない場合と、指定した場合とでデーモンプロセスの起動方法が異なります。  
デーモンプロセスはどちらにしても使われるし、インターフェースはwsgiです。  
WSGIDaemonProcessを指定しない場合、起動されたデーモンプロセスは全てのアプリケーションで使い回されます。WSGIDaemonProcessを指定した場合、アプリを提供するユーザー毎に異なるデーモンプロセスを使用します。つまり、共用サーバー等で複数のユーザーがwsgiアプリを動かしたい場合に、セキュリティーの向上やクラッシュ時の影響範囲などをユーザー単位に抑えるために指定するオプションです。  
<http://modwsgi.readthedocs.io/en/develop/configuration-
directives/WSGIDaemonProcess.html>


CC BY-SA 3.0
2017-05-15T14:07:52.887
34731
2017-05-15T14:07:52.887
806
34704
answer