質問: **PythonをWeb上で、下記何れかの方法により動作させようと思っているのですが** ``` ・Nginx、CGI、Python ・Nginx、uWSGI、Python ``` --- **Q1.CGIを選択するメリットについて** ・何かありますか? ・手軽に実装できることぐらい? ・性能的にwsgiより劣るわけではない?? --- **Q2.wsgiについて** ・Pythonに特化したインターフェース定義ですか? ・それとも、CGIに代わる新たな接続標準仕様? ・CGIが古いというわけではない?? --- **Q3.uWSGIについて** ・wsgi規格のインターフェースを実装したもの? ・Nginxで使用できるwsgiは他にもありますか? ・uWSGIは、Nginxに特化しているわけではない?? --- **環境** ・CentOS ・Nginx
回答: CGIを中心に補足します。 Q1.CGIを選択するメリットについて CGIについては、python2.7の公式ドキュメントに詳しい説明があります。python3の方にはないので内容は古いですが、説明は詳しいです。 CGIは、リクエスト毎に新しいPythonインタプリタを起動するため起動に時間がかかり非効率です。 その問題を解決したものの一つにFastCGIがあります。CGIと言った場合に、古典的CGIはもうあまり使われていないのでFastCGIのことを指す場合も多いです。古典的CGIの方は性能が劣りますが、FastCGIの方は性能的に問題はありません。PHPの場合は、php-fpmというソフトが有名でFastCGIが広く使われています。しかし、Pythonでは、公式マニュアルでWSGIの使用を勧めているためかそれほど使われていません。 NginxでFastCGIを動かしたい場合は、nginx製のFCGI Wrapというモジュールや, FastCGIの機能をもつ lighttpd Webサーバを、NginxとPythonアプリの間に置きます。 Q2.WSGIについて WebサーバとPythonで記述されたWebアプリケーションとの標準インターフェースです。Webサーバー側でWSGIを実装したソフトウェア(いわゆるアプリケーションサーバー)には、uWSGI, Gunicorn, NGINX Unit等があります。アプリケーションサーバーを使う場合、通常はNginxをリバースプロキシにして前に置きます。リバースプロキシを使う理由は、セキュリティの向上やSSL対応、コンテンツの圧縮、画像等の静的ファイルのキャッシュをリバースプロキシで行うことによりアプリケーションサーバーの負荷軽減が図れます。